php中base64和js中base64可互相加解密
php中base64和js中base64可互相加解密
前提:加解密的字符必须转换成UTF-8编码格式。
php代码:
- <?php
- $str='中国航母辽宁号-歼15战机GOOD=ok';
- echo $encode_str= base64_encode($str);
- echo '<br />';
- echo base64_decode($encode_str);
- ?>
js代码:
- <script language='javascript'>
- function utf16to8(str) {
- var out, i, len, c;
- out = "";
- len = str.length;
- for(i = 0; i < len; i++) {
- c = str.charCodeAt(i);
- if ((c >= 0x0001) && (c <= 0x007F)) {
- out += str.charAt(i);
- } else if (c > 0x07FF) {
- out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
- out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
- } else {
- out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
- }
- }
- return out;
- }
- function utf8to16(str) {
- var out, i, len, c;
- var char2, char3;
- out = "";
- len = str.length;
- i = 0;
- while(i < len) {
- c = str.charCodeAt(i++);
- switch(c >> 4)
- {
- case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
- // 0xxxxxxx
- out += str.charAt(i-1);
- break;
- case 12: case 13:
- // 110x xxxx 10xx xxxx
- char2 = str.charCodeAt(i++);
- out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
- break;
- case 14:
- // 1110 xxxx 10xx xxxx 10xx xxxx
- char2 = str.charCodeAt(i++);
- char3 = str.charCodeAt(i++);
- out += String.fromCharCode(((c & 0x0F) << 12) |
- ((char2 & 0x3F) << 6) |
- ((char3 & 0x3F) << 0));
- break;
- }
- }
- return out;
- }
- var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var base64DecodeChars = new Array(
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
- function base64encode(str) {
- var out, i, len;
- var c1, c2, c3;
- len = str.length;
- i = 0;
- out = "";
- while(i < len) {
- c1 = str.charCodeAt(i++) & 0xff;
- if(i == len)
- {
- out += base64EncodeChars.charAt(c1 >> 2);
- out += base64EncodeChars.charAt((c1 & 0x3) << 4);
- out += "==";
- break;
- }
- c2 = str.charCodeAt(i++);
- if(i == len)
- {
- out += base64EncodeChars.charAt(c1 >> 2);
- out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
- out += base64EncodeChars.charAt((c2 & 0xF) << 2);
- out += "=";
- break;
- }
- c3 = str.charCodeAt(i++);
- out += base64EncodeChars.charAt(c1 >> 2);
- out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
- out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
- out += base64EncodeChars.charAt(c3 & 0x3F);
- }
- return out;
- }
- function base64decode(str) {
- var c1, c2, c3, c4;
- var i, len, out;
- len = str.length;
- i = 0;
- out = "";
- while(i < len) {
- /* c1 */
- do {
- c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
- } while(i < len && c1 == -1);
- if(c1 == -1)
- break;
- /* c2 */
- do {
- c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
- } while(i < len && c2 == -1);
- if(c2 == -1)
- break;
- out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
- /* c3 */
- do {
- c3 = str.charCodeAt(i++) & 0xff;
- if(c3 == 61)
- return out;
- c3 = base64DecodeChars[c3];
- } while(i < len && c3 == -1);
- if(c3 == -1)
- break;
- out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
- /* c4 */
- do {
- c4 = str.charCodeAt(i++) & 0xff;
- if(c4 == 61)
- return out;
- c4 = base64DecodeChars[c4];
- } while(i < len && c4 == -1);
- if(c4 == -1)
- break;
- out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
- }
- return out;
- }
- function str_decode(str){
- return utf8to16(base64decode(str));
- }
- function str_encode(str){
- return base64encode(utf16to8(str));
- }
- var str='中国航母辽宁号-歼15战机GOOD=ok';
- var encode_str=str_encode(str);
- document.write(encode_str);
- document.write('<br />');
- var decode_str=str_decode(encode_str);
- document.write(decode_str);
- </script>
两者输出结果(一模一样):
5Lit5Zu96Iiq5q+N6L695a6B5Y+3LeatvDE15oiY5py6R09PRD1vaw==
中国航母辽宁号-歼15战机GOOD=ok
5Lit5Zu96Iiq5q+N6L695a6B5Y+3LeatvDE15oiY5py6R09PRD1vaw==
中国航母辽宁号-歼15战机GOOD=ok
本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1071762,如需转载请自行联系原作者
php中base64和js中base64可互相加解密相关推荐
- java中密码修改核心代码_彻底告别加解密模块代码拷贝-JCE核心Cpiher详解
前提 javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适.Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种 ...
- SpringBoot中如何灵活的实现接口数据的加解密功能?
数据是企业的第四张名片,企业级开发中少不了数据的加密传输,所以本文介绍下SpringBoot中接口数据加密.解密的方式. 本文目录 一.加密方案介绍二.实现原理三.实战四.测试五.踩到的坑 一.加密方 ...
- rsa加解密 --- jsencrypt.min.js --- 支持长字符串分段加解密
前端 + rsa加解密 + jsencrypt.min.js–(新增超长字符分段加解密) 分享2种,分段 和 不分段 加解密 --话不多说,直接上代码!~ 最终效果: 首先引入2个js <scr ...
- SQLAlchemy中模糊查询;JS中POST带参数跳转;JS获取url参数
SQLAlchemy中模糊查询,如何like多个关键字 JS中POST带参数跳转 一个项目中要跳转到另外一个项目,还需要带参数 考虑到安全性的问题,最好是用POST跳转,不能再URL中拼参 所以找到了 ...
- 中getname_浅析JS中的class
前言 在 ES6 规范中,引入了 class 的概念.使得 JS 开发者终于告别了,直接使用原型对象模仿面向对象中的类和类继承时代. 但是JS 中并没有一个真正的 class 原始类型, class ...
- js在html中拆分字符串,js中的split方法 js用split()取字符串
本来想通过静态HTML传递参数,动态读取url0和url字段,试了一下没成功.定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separ ...
- JQuery中width和JS中JS中关于clientWidth offsetWidth scrollWidth 等的含义
JQuery中: 1.width()方法用于获得元素内容所占的宽度: 2.innerWidth()方法用于获得包括内边界(padding)的元素宽度: 算式:innerWidth()=width()+ ...
- base64编码 vba_【VBA研究】如何用Base64 编解码方法实现简单的加解密
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...
- Base64、Unicode、URL编解码加解密
由IFTC(工作室链接:https://shequ.codemao.cn/work_shop/10892)制作的编解码加解密的APP 下载链接:https://creation.codemao.cn/ ...
最新文章
- 查询程序崩溃日志_PC 崩溃报告途径 amp; 临时解决方法
- 5848. 树上的操作
- 【CodeForces - 618A】Slime Combining(二进制,思维)
- jpush 极光推送 java
- EMC 电磁兼容测试项目
- [C++ Primer] 第2章: 变量
- 社区团购的终局是不是团长被抛弃?
- java串口设备中断_利用DMA双缓冲或半完成中断实现串口不定长数据的接收
- 自定义异常并抛出,捕获
- 前端跨域之Jsonp实现原理及.Net下Jsonp的实现
- win10计算机怎么拨号上网,win10拨号连接怎么创建 win10宽带拨号连接如何设置
- 力扣-58 最后一个单词的长度
- python计数器Count
- xps15u盘装linux,戴尔XPS 15 9575笔记本安装win10系统的操作教程
- 微信小程序获取地理位置最佳实现
- oracle 基本语句
- chp2-2-2_fmm_word_seg通过最大正向匹配算法对句子进行切分
- 三条命令搞定Winload.exe出现0xc000000e错误
- 2023年12306购票平台自动化购票二|解决车次查找与预定
- 程序员必看:如何快速戒掉熬夜(晚睡)强迫症
热门文章
- 率先实现全球首个SAE L4级AVP功能量产,博世打响AVP商业化之战
- 2021牛客寒假算法基础集训营6 J.天空之城
- C实现估计混响语音的混响时间
- 素材类dedecms织梦模板免费下载
- 多链游戏Mythical Beings神秘生物第3季即将上线
- 【FPGA 芯片设计】FPGA 简介 ( FPGA 芯片架构 | FPGA 芯片相对于传统芯片的优点 )
- 【IoT】什么是物联网?其发展前景如何?
- “顾磊,我想辞职!”
- 水位尺读数识别 python_一种基于人工智能识别水尺水位的方法与流程
- Apache FTPClient上传下载文件