base64.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*******************************************************
  2. *
  3. * 函数名称:Base64encode()
  4. * 功 能:对数据进行Base64加密
  5. * 说 明:函数中将数据使用_utf8_encode()进行编码转换后再加密,保证数据完整
  6. *
  7. **********************************************************/
  8. var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  9. function _Base64encode(input) {
  10. var output = "";
  11. var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
  12. var i = 0;
  13. input = _utf8_encode(input);
  14. while (i < input.length) {
  15. chr1 = input.charCodeAt(i++);
  16. chr2 = input.charCodeAt(i++);
  17. chr3 = input.charCodeAt(i++);
  18. enc1 = chr1 >> 2;
  19. enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  20. enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  21. enc4 = chr3 & 63;
  22. if (isNaN(chr2)) {
  23. enc3 = enc4 = 64;
  24. } else if (isNaN(chr3)) {
  25. enc4 = 64;
  26. }
  27. output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
  28. }
  29. return output;
  30. }
  31. /*******************************************************
  32. *
  33. * 函数名称:Base64decode()
  34. * 功 能:对数据进行Base64解密
  35. * 说 明:函数中将数据使用_utf8_decode()将解密后的数据编码,保证数据完整
  36. *
  37. **********************************************************/
  38. function _Base64decode(input) {
  39. var output = "";
  40. var chr1, chr2, chr3;
  41. var enc1, enc2, enc3, enc4;
  42. var i = 0;
  43. //input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  44. input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  45. while (i < input.length) {
  46. enc1 = this._keyStr.indexOf(input.charAt(i++));
  47. enc2 = this._keyStr.indexOf(input.charAt(i++));
  48. enc3 = this._keyStr.indexOf(input.charAt(i++));
  49. enc4 = this._keyStr.indexOf(input.charAt(i++));
  50. chr1 = (enc1 << 2) | (enc2 >> 4);
  51. chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  52. chr3 = ((enc3 & 3) << 6) | enc4;
  53. output = output + String.fromCharCode(chr1);
  54. if (enc3 != 64) {
  55. output = output + String.fromCharCode(chr2);
  56. }
  57. if (enc4 != 64) {
  58. output = output + String.fromCharCode(chr3);
  59. }
  60. }
  61. output = _utf8_decode(output);
  62. return output;
  63. }
  64. /*******************************************************
  65. *
  66. * 函数名称:_utf8_encode()
  67. * 功 能:将数据进行utf8编码
  68. * 说 明:
  69. *
  70. **********************************************************/
  71. function _utf8_encode(in_string) {
  72. string = "" + in_string;
  73. string = string.replace(/\r\n/g, "\n");
  74. var utftext = "";
  75. for (var n = 0; n < string.length; n++) {
  76. var c = string.charCodeAt(n);
  77. if (c < 128) {
  78. utftext += String.fromCharCode(c);
  79. } else if ((c > 127) && (c < 2048)) {
  80. utftext += String.fromCharCode((c >> 6) | 192);
  81. utftext += String.fromCharCode((c & 63) | 128);
  82. } else {
  83. utftext += String.fromCharCode((c >> 12) | 224);
  84. utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  85. utftext += String.fromCharCode((c & 63) | 128);
  86. }
  87. }
  88. return utftext;
  89. }
  90. /*******************************************************
  91. *
  92. * 函数名称:_utf8_decode()
  93. * 功 能:将数据进行utf8解码
  94. * 说 明:
  95. *
  96. **********************************************************/
  97. function _utf8_decode(utftext) {
  98. var string = "";
  99. var i = 0;
  100. var c = c1 = c2 = 0;
  101. while (i < utftext.length) {
  102. c = utftext.charCodeAt(i);
  103. if (c < 128) {
  104. string += String.fromCharCode(c);
  105. i++;
  106. } else if ((c > 191) && (c < 224)) {
  107. c2 = utftext.charCodeAt(i + 1);
  108. string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
  109. i += 2;
  110. } else {
  111. c2 = utftext.charCodeAt(i + 1);
  112. c3 = utftext.charCodeAt(i + 2);
  113. string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
  114. i += 3;
  115. }
  116. }
  117. return string;
  118. }