公开验证六码复式连码:Base64 用 js 编码 解码 base64 完整代码

一、什么是Base64?

连码四七靠三活猜生肖 www.dvwa8.cn Base64是一种基于64个可打印字符来表示二进制数据的表示方法。

由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。

三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。

 

在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同(本类库里面用的是`+`,`/`这两个字符)。

 

一些如uuencode的其他编码方法,和之后binhex的版本使用不同的64字符集来代表6个二进制数字,但是它们不叫Base64。

 

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据.

 

二、编码规则:

Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。

 

以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。

再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。

 

当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。

这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。

 

Base64

 

三、实现的代码:

  1. //下面是64个基本的编码
  2. var?base64EncodeChars?=?"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  3. var?base64DecodeChars?=?new?Array(
  4. ?????????-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,
  5. ?????????-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,
  6. ?????????-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?-1,?62,?-1,?-1,?-1,?63,
  7. ?????????52,?53,?54,?55,?56,?57,?58,?59,?60,?61,?-1,?-1,?-1,?-1,?-1,?-1,
  8. ?????????-1,??0,??1,??2,??3,??4,??5,??6,??7,??8,??9,?10,?11,?12,?13,?14,
  9. ?????????15,?16,?17,?18,?19,?20,?21,?22,?23,?24,?25,?-1,?-1,?-1,?-1,?-1,
  10. ????????-1,?26,?27,?28,?29,?30,?31,?32,?33,?34,?35,?36,?37,?38,?39,?40,
  11. ????????41,?42,?43,?44,?45,?46,?47,?48,?49,?50,?51,?-1,?-1,?-1,?-1,?-1);
  12. //编码的方法
  13. function?base64encode(str)?{
  14. var?out,?i,?len;
  15. var?c1,?c2,?c3;
  16. ????????len?=?str.length;
  17. ????????i?=?0;
  18. ????????out?=?"";
  19. while(i?<?len)?{
  20. ????????c1?=?str.charCodeAt(i++)?&?0xff;
  21. if(i?==?len)
  22. ????????{
  23. ????????????out?+=?base64EncodeChars.charAt(c1?>>?2);
  24. ????????????out?+=?base64EncodeChars.charAt((c1?&?0x3)?<<?4);
  25. ????????????out?+=?"==";
  26. break;
  27. ????????}
  28. ????????c2?=?str.charCodeAt(i++);
  29. if(i?==?len)
  30. ????????{
  31. ????????????out?+=?base64EncodeChars.charAt(c1?>>?2);
  32. ????????????out?+=?base64EncodeChars.charAt(((c1?&?0x3)<<?4)?|?((c2?&?0xF0)?>>?4));
  33. ????????????out?+=?base64EncodeChars.charAt((c2?&?0xF)?<<?2);
  34. ????????????out?+=?"=";
  35. break;
  36. ????????}
  37. ????????c3?=?str.charCodeAt(i++);
  38. ????????out?+=?base64EncodeChars.charAt(c1?>>?2);
  39. ????????out?+=?base64EncodeChars.charAt(((c1?&?0x3)<<?4)?|?((c2?&?0xF0)?>>?4));
  40. ????????out?+=?base64EncodeChars.charAt(((c2?&?0xF)?<<?2)?|?((c3?&?0xC0)?>>6));
  41. ????????out?+=?base64EncodeChars.charAt(c3?&?0x3F);
  42. ????????}
  43. return?out;
  44. ????}
  45. //解码的方法
  46. function?base64decode(str)?{
  47. var?c1,?c2,?c3,?c4;
  48. var?i,?len,?out;
  49. ????????len?=?str.length;
  50. ????????i?=?0;
  51. ????????out?=?"";
  52. while(i?<?len)?{
  53. do?{
  54. ????????????c1?=?base64DecodeChars[str.charCodeAt(i++)?&?0xff];
  55. ????????}?while(i?<?len?&&?c1?==?-1);
  56. if(c1?==?-1)
  57. break;
  58. do?{
  59. ????????????c2?=?base64DecodeChars[str.charCodeAt(i++)?&?0xff];
  60. ????????}?while(i?<?len?&&?c2?==?-1);
  61. if(c2?==?-1)
  62. break;
  63. ????????out?+=?String.fromCharCode((c1?<<?2)?|?((c2?&?0x30)?>>?4));
  64. do?{
  65. ????????????c3?=?str.charCodeAt(i++)?&?0xff;
  66. if(c3?==?61)
  67. return?out;
  68. ????????????c3?=?base64DecodeChars[c3];
  69. ????????}?while(i?<?len?&&?c3?==?-1);
  70. if(c3?==?-1)
  71. break;
  72. ????????out?+=?String.fromCharCode(((c2?&?0XF)?<<?4)?|?((c3?&?0x3C)?>>?2));
  73. do?{
  74. ????????????c4?=?str.charCodeAt(i++)?&?0xff;
  75. if(c4?==?61)
  76. return?out;
  77. ????????????c4?=?base64DecodeChars[c4];
  78. ????????}?while(i?<?len?&&?c4?==?-1);
  79. if(c4?==?-1)
  80. break;
  81. ????????out?+=?String.fromCharCode(((c3?&?0x03)?<<?6)?|?c4);
  82. ????????}
  83. return?out;
  84. ????}
  85. function?utf16to8(str)?{
  86. var?out,?i,?len,?c;
  87. ????????out?=?"";
  88. ????????len?=?str.length;
  89. for(i?=?0;?i?<?len;?i++)?{
  90. ????????c?=?str.charCodeAt(i);
  91. if?((c?>=?0x0001)?&&?(c?<=?0x007F))?{
  92. ????????????out?+=?str.charAt(i);
  93. ????????}?else?if?(c?>?0x07FF)?{
  94. ????????????out?+=?String.fromCharCode(0xE0?|?((c?>>?12)?&?0x0F));
  95. ????????????out?+=?String.fromCharCode(0x80?|?((c?>>??6)?&?0x3F));
  96. ???????????out?+=?String.fromCharCode(0x80?|?((c?>>??0)?&?0x3F));
  97. ???????}?else?{
  98. ???????????out?+=?String.fromCharCode(0xC0?|?((c?>>??6)?&?0x1F));
  99. ???????????out?+=?String.fromCharCode(0x80?|?((c?>>??0)?&?0x3F));
  100. ???????}
  101. ???????}
  102. return?out;
  103. ???}
  104. function?utf8to16(str)?{
  105. var?out,?i,?len,?c;
  106. var?char2,?char3;
  107. ???????out?=?"";
  108. ???????len?=?str.length;
  109. ???????i?=?0;
  110. while(i?<?len)?{
  111. ???????c?=?str.charCodeAt(i++);
  112. switch(c?>>?4)
  113. ???????{
  114. case?0:?case?1:?case?2:?case?3:?case?4:?case?5:?case?6:?case?7:
  115. //?0xxxxxxx
  116. ???????????out?+=?str.charAt(i-1);
  117. break;
  118. case?12:?case?13:
  119. //?110x?xxxx???10xx?xxxx
  120. ???????????char2?=?str.charCodeAt(i++);
  121. ???????????out?+=?String.fromCharCode(((c?&?0x1F)?<<?6)?|?(char2?&?0x3F));
  122. break;
  123. case?14:
  124. //?1110?xxxx??10xx?xxxx??10xx?xxxx
  125. ???????????char2?=?str.charCodeAt(i++);
  126. ???????????char3?=?str.charCodeAt(i++);
  127. ???????????out?+=?String.fromCharCode(((c?&?0x0F)?<<?12)?|
  128. ??????????????????????????((char2?&?0x3F)?<<?6)?|
  129. ??????????????????????????((char3?&?0x3F)?<<?0));
  130. break;
  131. ???????}
  132. ???????}
  133. return?out;
  134. ??}

 

调用方法:

  1. //编码
  2. value?=?base64encode(utf16to8(src))
  3. //解码
  4. value?=?utf8to16(base64decode(src))
    A+
发布日期:2017年08月11日  所属分类:javascript
最后修改时间:2017-08-11 15:37
评分: (当前没有评级)
付杰
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
  • ¥ 6.8元
  • 市场价:8.8元
wordpress discux dedecms 帝国 phpcms等快速建站服务
wordpress discux dedecms 帝国 phpcms等快速建站服务
  • ¥ 99.9元
  • 市场价:499.9元
永久免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
永久免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: