php中base64和js中base64可互相加解密

前提:加解密的字符必须转换成UTF-8编码格式。

php代码:

  1. <?php
  2. $str='中国航母辽宁号-歼15战机GOOD=ok';
  3. echo $encode_str= base64_encode($str);
  4. echo '<br />';
  5. echo base64_decode($encode_str);
  6. ?>

js代码:

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

两者输出结果(一模一样):

5Lit5Zu96Iiq5q+N6L695a6B5Y+3LeatvDE15oiY5py6R09PRD1vaw==
中国航母辽宁号-歼15战机GOOD=ok

5Lit5Zu96Iiq5q+N6L695a6B5Y+3LeatvDE15oiY5py6R09PRD1vaw==
中国航母辽宁号-歼15战机GOOD=ok

本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1071762,如需转载请自行联系原作者

php中base64和js中base64可互相加解密相关推荐

  1. java中密码修改核心代码_彻底告别加解密模块代码拷贝-JCE核心Cpiher详解

    前提 javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适.Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种 ...

  2. SpringBoot中如何灵活的实现接口数据的加解密功能?

    数据是企业的第四张名片,企业级开发中少不了数据的加密传输,所以本文介绍下SpringBoot中接口数据加密.解密的方式. 本文目录 一.加密方案介绍二.实现原理三.实战四.测试五.踩到的坑 一.加密方 ...

  3. rsa加解密 --- jsencrypt.min.js --- 支持长字符串分段加解密

    前端 + rsa加解密 + jsencrypt.min.js–(新增超长字符分段加解密) 分享2种,分段 和 不分段 加解密 --话不多说,直接上代码!~ 最终效果: 首先引入2个js <scr ...

  4. SQLAlchemy中模糊查询;JS中POST带参数跳转;JS获取url参数

    SQLAlchemy中模糊查询,如何like多个关键字 JS中POST带参数跳转 一个项目中要跳转到另外一个项目,还需要带参数 考虑到安全性的问题,最好是用POST跳转,不能再URL中拼参 所以找到了 ...

  5. 中getname_浅析JS中的class

    前言 在 ES6 规范中,引入了 class 的概念.使得 JS 开发者终于告别了,直接使用原型对象模仿面向对象中的类和类继承时代. 但是JS 中并没有一个真正的 class 原始类型, class ...

  6. js在html中拆分字符串,js中的split方法 js用split()取字符串

    本来想通过静态HTML传递参数,动态读取url0和url字段,试了一下没成功.定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separ ...

  7. JQuery中width和JS中JS中关于clientWidth offsetWidth scrollWidth 等的含义

    JQuery中: 1.width()方法用于获得元素内容所占的宽度: 2.innerWidth()方法用于获得包括内边界(padding)的元素宽度: 算式:innerWidth()=width()+ ...

  8. base64编码 vba_【VBA研究】如何用Base64 编解码方法实现简单的加解密

    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...

  9. Base64、Unicode、URL编解码加解密

    由IFTC(工作室链接:https://shequ.codemao.cn/work_shop/10892)制作的编解码加解密的APP 下载链接:https://creation.codemao.cn/ ...

最新文章

  1. 查询程序崩溃日志_PC 崩溃报告途径 amp; 临时解决方法
  2. 5848. 树上的操作
  3. 【CodeForces - 618A】Slime Combining(二进制,思维)
  4. jpush 极光推送 java
  5. EMC 电磁兼容测试项目
  6. [C++ Primer] 第2章: 变量
  7. 社区团购的终局是不是团长被抛弃?
  8. java串口设备中断_利用DMA双缓冲或半完成中断实现串口不定长数据的接收
  9. 自定义异常并抛出,捕获
  10. 前端跨域之Jsonp实现原理及.Net下Jsonp的实现
  11. win10计算机怎么拨号上网,win10拨号连接怎么创建 win10宽带拨号连接如何设置
  12. 力扣-58 最后一个单词的长度
  13. python计数器Count
  14. xps15u盘装linux,戴尔XPS 15 9575笔记本安装win10系统的操作教程
  15. 微信小程序获取地理位置最佳实现
  16. oracle 基本语句
  17. chp2-2-2_fmm_word_seg通过最大正向匹配算法对句子进行切分
  18. 三条命令搞定Winload.exe出现0xc000000e错误
  19. 2023年12306购票平台自动化购票二|解决车次查找与预定
  20. 程序员必看:如何快速戒掉熬夜(晚睡)强迫症

热门文章

  1. 率先实现全球首个SAE L4级AVP功能量产,博世打响AVP商业化之战
  2. 2021牛客寒假算法基础集训营6 J.天空之城
  3. C实现估计混响语音的混响时间
  4. 素材类dedecms织梦模板免费下载
  5. 多链游戏Mythical Beings神秘生物第3季即将上线
  6. 【FPGA 芯片设计】FPGA 简介 ( FPGA 芯片架构 | FPGA 芯片相对于传统芯片的优点 )
  7. 【IoT】什么是物联网?其发展前景如何?
  8. “顾磊,我想辞职!”
  9. 水位尺读数识别 python_一种基于人工智能识别水尺水位的方法与流程
  10. Apache FTPClient上传下载文件