enc-base64.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*
  2. CryptoJS v3.1.2
  3. code.google.com/p/crypto-js
  4. (c) 2009-2013 by Jeff Mott. All rights reserved.
  5. code.google.com/p/crypto-js/wiki/License
  6. */
  7. (function () {
  8. // Shortcuts
  9. var C = CryptoJS;
  10. var C_lib = C.lib;
  11. var WordArray = C_lib.WordArray;
  12. var C_enc = C.enc;
  13. /**
  14. * Base64 encoding strategy.
  15. */
  16. var Base64 = C_enc.Base64 = {
  17. /**
  18. * Converts a word array to a Base64 string.
  19. *
  20. * @param {WordArray} wordArray The word array.
  21. *
  22. * @return {string} The Base64 string.
  23. *
  24. * @static
  25. *
  26. * @example
  27. *
  28. * var base64String = CryptoJS.enc.Base64.stringify(wordArray);
  29. */
  30. stringify: function (wordArray) {
  31. // Shortcuts
  32. var words = wordArray.words;
  33. var sigBytes = wordArray.sigBytes;
  34. var map = this._map;
  35. // Clamp excess bits
  36. wordArray.clamp();
  37. // Convert
  38. var base64Chars = [];
  39. for (var i = 0; i < sigBytes; i += 3) {
  40. var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
  41. var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
  42. var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
  43. var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
  44. for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
  45. base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
  46. }
  47. }
  48. // Add padding
  49. var paddingChar = map.charAt(64);
  50. if (paddingChar) {
  51. while (base64Chars.length % 4) {
  52. base64Chars.push(paddingChar);
  53. }
  54. }
  55. return base64Chars.join('');
  56. },
  57. /**
  58. * Converts a Base64 string to a word array.
  59. *
  60. * @param {string} base64Str The Base64 string.
  61. *
  62. * @return {WordArray} The word array.
  63. *
  64. * @static
  65. *
  66. * @example
  67. *
  68. * var wordArray = CryptoJS.enc.Base64.parse(base64String);
  69. */
  70. parse: function (base64Str) {
  71. // Shortcuts
  72. var base64StrLength = base64Str.length;
  73. var map = this._map;
  74. // Ignore padding
  75. var paddingChar = map.charAt(64);
  76. if (paddingChar) {
  77. var paddingIndex = base64Str.indexOf(paddingChar);
  78. if (paddingIndex != -1) {
  79. base64StrLength = paddingIndex;
  80. }
  81. }
  82. // Convert
  83. var words = [];
  84. var nBytes = 0;
  85. for (var i = 0; i < base64StrLength; i++) {
  86. if (i % 4) {
  87. var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);
  88. var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);
  89. words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);
  90. nBytes++;
  91. }
  92. }
  93. return WordArray.create(words, nBytes);
  94. },
  95. _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
  96. };
  97. }());