人民医院前端

base64.js 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Base64 JavaScript decoder
  2. // Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. /*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
  15. var decoder;
  16. export var Base64 = {
  17. decode: function (a) {
  18. var i;
  19. if (decoder === undefined) {
  20. var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  21. var ignore = "= \f\n\r\t\u00A0\u2028\u2029";
  22. decoder = Object.create(null);
  23. for (i = 0; i < 64; ++i) {
  24. decoder[b64.charAt(i)] = i;
  25. }
  26. decoder['-'] = 62; //+
  27. decoder['_'] = 63; //-
  28. for (i = 0; i < ignore.length; ++i) {
  29. decoder[ignore.charAt(i)] = -1;
  30. }
  31. }
  32. var out = [];
  33. var bits = 0;
  34. var char_count = 0;
  35. for (i = 0; i < a.length; ++i) {
  36. var c = a.charAt(i);
  37. if (c == "=") {
  38. break;
  39. }
  40. c = decoder[c];
  41. if (c == -1) {
  42. continue;
  43. }
  44. if (c === undefined) {
  45. throw new Error("Illegal character at offset " + i);
  46. }
  47. bits |= c;
  48. if (++char_count >= 4) {
  49. out[out.length] = (bits >> 16);
  50. out[out.length] = (bits >> 8) & 0xFF;
  51. out[out.length] = bits & 0xFF;
  52. bits = 0;
  53. char_count = 0;
  54. }
  55. else {
  56. bits <<= 6;
  57. }
  58. }
  59. switch (char_count) {
  60. case 1:
  61. throw new Error("Base64 encoding incomplete: at least 2 bits missing");
  62. case 2:
  63. out[out.length] = (bits >> 10);
  64. break;
  65. case 3:
  66. out[out.length] = (bits >> 16);
  67. out[out.length] = (bits >> 8) & 0xFF;
  68. break;
  69. }
  70. return out;
  71. },
  72. re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,
  73. unarmor: function (a) {
  74. var m = Base64.re.exec(a);
  75. if (m) {
  76. if (m[1]) {
  77. a = m[1];
  78. }
  79. else if (m[2]) {
  80. a = m[2];
  81. }
  82. else {
  83. throw new Error("RegExp out of sync");
  84. }
  85. }
  86. return Base64.decode(a);
  87. }
  88. };