人民医院前端

base64.js 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { int2char } from "./util";
  2. var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  3. var b64pad = "=";
  4. export function hex2b64(h) {
  5. var i;
  6. var c;
  7. var ret = "";
  8. for (i = 0; i + 3 <= h.length; i += 3) {
  9. c = parseInt(h.substring(i, i + 3), 16);
  10. ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
  11. }
  12. if (i + 1 == h.length) {
  13. c = parseInt(h.substring(i, i + 1), 16);
  14. ret += b64map.charAt(c << 2);
  15. }
  16. else if (i + 2 == h.length) {
  17. c = parseInt(h.substring(i, i + 2), 16);
  18. ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
  19. }
  20. while ((ret.length & 3) > 0) {
  21. ret += b64pad;
  22. }
  23. return ret;
  24. }
  25. // convert a base64 string to hex
  26. export function b64tohex(s) {
  27. var ret = "";
  28. var i;
  29. var k = 0; // b64 state, 0-3
  30. var slop = 0;
  31. for (i = 0; i < s.length; ++i) {
  32. if (s.charAt(i) == b64pad) {
  33. break;
  34. }
  35. var v = b64map.indexOf(s.charAt(i));
  36. if (v < 0) {
  37. continue;
  38. }
  39. if (k == 0) {
  40. ret += int2char(v >> 2);
  41. slop = v & 3;
  42. k = 1;
  43. }
  44. else if (k == 1) {
  45. ret += int2char((slop << 2) | (v >> 4));
  46. slop = v & 0xf;
  47. k = 2;
  48. }
  49. else if (k == 2) {
  50. ret += int2char(slop);
  51. ret += int2char(v >> 2);
  52. slop = v & 3;
  53. k = 3;
  54. }
  55. else {
  56. ret += int2char((slop << 2) | (v >> 4));
  57. ret += int2char(v & 0xf);
  58. k = 0;
  59. }
  60. }
  61. if (k == 1) {
  62. ret += int2char(slop << 2);
  63. }
  64. return ret;
  65. }
  66. // convert a base64 string to a byte/number array
  67. export function b64toBA(s) {
  68. // piggyback on b64tohex for now, optimize later
  69. var h = b64tohex(s);
  70. var i;
  71. var a = [];
  72. for (i = 0; 2 * i < h.length; ++i) {
  73. a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);
  74. }
  75. return a;
  76. }