1. public class Base64Utils {
    2. private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    3. public static String base64(String str) {
    4. return base64(str == null ? null : str.getBytes());
    5. }
    6. public static String base64(byte[] bytes) {
    7. if (bytes == null || bytes.length == 0) {
    8. return "";
    9. }
    10. int length = bytes.length;
    11. int gSize = 3;
    12. int group = (length - 1) / gSize + 1;
    13. int[] arr = new int[4];
    14. byte[] result = new byte[group * 4];
    15. int n = 0;
    16. while (n < group) {
    17. int m = 0;
    18. int words = arr.length;
    19. int offset = n * gSize;
    20. for (int i = 0; i < gSize; i++) {
    21. int index = offset + i;
    22. if (index < length) {
    23. m = (m << 8) + bytes[index];
    24. } else {
    25. if (i == 1) {
    26. m = m << 4;
    27. words = 2;
    28. } else {
    29. m = m << 2;
    30. words = 3;
    31. }
    32. break;
    33. }
    34. }
    35. int r = n << 2;
    36. for (int i = 4; i > 0; i--) {
    37. if (i <= words) {
    38. result[r + i - 1] = (byte) CHARACTERS.charAt(m & 0x3f);
    39. m = m >> 6;
    40. } else {
    41. result[r + i - 1] = (byte) '=';
    42. }
    43. }
    44. n++;
    45. }
    46. return new String(result);
    47. }
    48. }