- 浏览: 141575 次
- 性别:
- 来自: 西南边陲
最新评论
-
leafxf:
这个和直接引用js有多大不同和优点?
近乎完美的简单 JS 跨域解决方式 --window.name -
zhangyg:
我怎么不行,我在执行到 var _getData = func ...
近乎完美的简单 JS 跨域解决方式 --window.name -
ray_linn:
akane 写道以后都走网上电子书城 楼主的问题就解决了
又 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感 -
asd:
知识库还是很好的,我不知道这里面的商业模式是什么,但是百度文库 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感 -
lkj107:
支持知识产权保护,BS百毒好好看看google是如何达到共赢的 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感
算法的基本原理和 Base64 类似。Base64 算法请参见维基百科 http://zh.wikipedia.org/zh-cn/Base64。
这里把 Base64 中使用的基本字符表进行了随机化——即用基本字符表排列的随机性作为密钥的变化性。同时,考虑编码方法的应用环境多为 Javascript,故将 Base64 规范字符表中的 “+/=” 改成了 “$_~”,便于网络传输和变量命名等。
对 “纯单字节” 字符串或 “纯双字节” 字符串,密文的长度增长 0.35 倍左右;在单/双字节混合的字符串中,因为需要在 “单/双字节序列” 间插入标识码(状态指示),故密文的长度会有所加长,但也不会增加太多。
该加密法的密文长度增加量略低于 “进制乱序法”,加密强度约为 296 位(64 的阶乘),算法中没有加入 “平移” 的二次操作,如果嫌加密强度不够,可以简单的对密文进行平移操作(详见 http://rubel.iteye.com/blog/891657)。
算法的编写参考了 《base64的js实现》,在此致谢!(注:该算法中未对编码串作 76 字符分段)
算法 4: Base64 变形加密法
用法:
附件中:
xtools.js 里包含前面几篇文章中提及的几个文字加密算法(JS 版,稍有调整),以及 Window.name 跨域实现的代码;
其它几个文件为测试用的 html 文件。
这里把 Base64 中使用的基本字符表进行了随机化——即用基本字符表排列的随机性作为密钥的变化性。同时,考虑编码方法的应用环境多为 Javascript,故将 Base64 规范字符表中的 “+/=” 改成了 “$_~”,便于网络传输和变量命名等。
对 “纯单字节” 字符串或 “纯双字节” 字符串,密文的长度增长 0.35 倍左右;在单/双字节混合的字符串中,因为需要在 “单/双字节序列” 间插入标识码(状态指示),故密文的长度会有所加长,但也不会增加太多。
该加密法的密文长度增加量略低于 “进制乱序法”,加密强度约为 296 位(64 的阶乘),算法中没有加入 “平移” 的二次操作,如果嫌加密强度不够,可以简单的对密文进行平移操作(详见 http://rubel.iteye.com/blog/891657)。
算法的编写参考了 《base64的js实现》,在此致谢!(注:该算法中未对编码串作 76 字符分段)
算法 4: Base64 变形加密法
(function() { // // 密文字符集(size:65)。 // [0-9A-Za-z$_~] // var _hexCHS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz$_~'; // // Base64 变形加密法 // 算法与 Base64 类似,即将 8 位字节用 6 位表示。 // 规则: // 1. 码值 <= 0xff 的用 1 个字节表示; // 2. 码值 > 0xff 的用 2 字节表示; // 3. 单/双字节序列间用 0x1d 进行分隔; // 4. 首字为双字节时即前置 0x1d 分隔符。 // // @param array key - [0-63] 互斥值数组,length == 64 // Hex64 = function( key ) { this._key = [], this._tbl = {}; for (var _i=0; _i<64; ++_i) { this._key[_i] = _hexCHS.charAt(key[_i]); this._tbl[this._key[_i]] = _i; } this._pad = _hexCHS.charAt(64); }; // 加密 Hex64.prototype.enc = function( s ) { var _rs = ''; var _c1, _c2, _c3, _n1, _n2, _n3, _n4; var _i = 0; var _a = Hex64._2to1(s); var _en = _a.length % 3, _sz = _a.length - _en; while (_i < _sz) { _c1 = _a[_i++]; _c2 = _a[_i++]; _c3 = _a[_i++]; _n1 = _c1 >> 2; _n2 = ((_c1 & 3) << 4) | (_c2 >> 4); _n3 = ((_c2 & 15) << 2) | (_c3 >> 6); _n4 = _c3 & 63; _rs += this._key[_n1] + this._key[_n2] + this._key[_n3] + this._key[_n4]; } if (_en > 0) { _c1 = _a[_i++]; _c2 = _en > 1 ? _a[_i] : 0; _n1 = _c1 >> 2; _n2 = ((_c1 & 3) << 4) | (_c2 >> 4); _n3 = (_c2 & 15) << 2; _rs += this._key[_n1] + this._key[_n2] + (_n3 ? this._key[_n3] : this._pad) + this._pad; } return _rs.replace(/.{76}/g, function(s) { return s + '\n'; }); }; // 解密 Hex64.prototype.dec = function( s ) { var _sa = [], _n1, _n2, _n3, _n4, _i = 0, _c = 0; s = s.replace(/[^0-9A-Za-z$_~]/g, ''); while (_i < s.length) { _n1 = this._tbl[s.charAt(_i++)]; _n2 = this._tbl[s.charAt(_i++)]; _n3 = this._tbl[s.charAt(_i++)]; _n4 = this._tbl[s.charAt(_i++)]; _sa[_c++] = (_n1 << 2) | (_n2 >> 4); _sa[_c++] = ((_n2 & 15) << 4) | (_n3 >> 2); _sa[_c++] = ((_n3 & 3) << 6) | _n4; } var _e2 = s.slice(-2); if (_e2.charAt(0) == this._pad) { _sa.length = _sa.length - 2; } else if (_e2.charAt(1) == this._pad) { _sa.length = _sa.length - 1; } return Hex64._1to2(_sa); }; // // 辅助: // Unicode 字符串 -> 单字节码值数组 // 注意: // 原串中值为 0x1d 的字节(非字符)会被删除。 // // @param string s - 字符串(UCS-16) // @return array - 单字节码值数组 // Hex64._2to1 = function( s ) { var _2b = false, _n = 0, _sa = []; if (s.charCodeAt(0) > 0xff) { _2b = true; _sa[_n++] = 0x1d; } for (var _i=0; _i<s.length; ++_i) { var _c = s.charCodeAt(_i); if (_c == 0x1d) continue; if (_c <= 0xff) { if (_2b) { _sa[_n++] = 0x1d; _2b = false; } _sa[_n++] = _c; } else { if (! _2b) { _sa[_n++] = 0x1d; _2b = true; } _sa[_n++] = _c >> 8; _sa[_n++] = _c & 0xff; } } return _sa; }; // // 辅助: // 单字节码值数组 -> Unicode 字符串 // // @param array a - 单字节码值数组 // @return string - 还原后的字符串(UCS-16) // Hex64._1to2 = function( a ) { var _2b = false, _rs = ''; for (var _i=0; _i<a.length; ++_i) { var _c = a[_i]; if (_c == 0x1d) { _2b = !_2b; continue; } if (_2b) { _rs += String.fromCharCode(_c * 256 + a[++_i]); } else { _rs += String.fromCharCode(_c); } } return _rs; }; })();
用法:
<script language="JavaScript"> var _str = "中文字符串和 English char string 的 JS 加密 1234. 包含一些标点符号,*@%! 等。"; //php -r "$a=range(0,63); shuffle($a); echo join(',', $a);" var _k3 = [38,48,18,11,26,19,55,58,10,33,34,49,14,25,44,52,61,16,2,56,23,29,45,9,3,12,39,30,42,47,22,21,60,1,54,28,57,17,27,15,40,46,43,13,0,51,35,63,36,50,6,32,4,31,62,5,24,8,53,59,41,20,7,37]; var _o = new Hex64(_k3); var _enc3 = _o.enc(_str); alert(_enc3) alert(_o.dec(_enc3)); //wNOpC3lUT50RuSXNSm4yGj8FUtHWdImSdtJ6AwP4gRHZC6cllezlAQkuAmV2eJ_tw2coESE4nscl //NaTNY4Ocukpem5I8M6CuKbfEw2kcX2Qyw9pXEcA~
附件中:
xtools.js 里包含前面几篇文章中提及的几个文字加密算法(JS 版,稍有调整),以及 Window.name 跨域实现的代码;
其它几个文件为测试用的 html 文件。
- tools.rar (9.2 KB)
- 下载次数: 171
发表评论
-
针对文字加密的简单 JS 加密算法 --进制乱序法改良版
2011-02-12 12:08 5639在上一篇文章《普通 http 网络下数据的安全传输(设计原理) ... -
普通 http 网络下数据的安全传输(设计原理)
2011-02-10 16:32 7876曾几何时,https 安全但 ... -
近乎完美的简单 JS 跨域解决方式 --window.name
2011-02-04 22:47 26035当然,“近乎完美”仅仅是个人观点,但如下所述,它确实简单而颇有 ... -
几个文字加密的 JS 简洁算法(续2)--进制乱序法
2011-01-31 22:44 2371续前一篇博文《几个文字加密的简洁算法和一些个人的想法》——字符 ... -
几个文字加密的 JS 简洁算法(续)-- 字符错位法
2011-01-26 12:28 3820续上一篇博文《几个文字加密的简洁算法和一些个人的想法》,不说开 ... -
几个文字加密的 JS 简洁算法(字符平移法)和一些个人的想法
2011-01-22 21:43 7874未深入了解过数据加密 ... -
几个文字加密的简洁算法和一些个人的想法
2011-01-22 21:34 0未深入了解过数据加密 ... -
优化PHP执行效率的40条技巧
2009-11-08 21:37 24891.如果一个方法能被静 ... -
姓氏排序程序 Js 版(小程序共享)
2009-10-19 10:02 1865一朋友给客户做类似黄 ... -
最简单的判断 Javascript 和 Cookie 是否禁用的代码
2009-10-09 12:10 998在服务器端 include 即可,如 PHP: include ... -
对 XSS 跨站攻击之所以存在的一些思考
2009-09-21 23:07 1326一直对漏洞、骇客、攻击之类的东西没敢深入,甚至肤浅的了解都算不 ... -
标准的字根输入法设想
2009-04-30 20:44 1483国家新版《汉字部首表》即将于5月1日发布,其中:主部首 2 ... -
普通 http 下可靠的网路认证方式
2009-04-01 21:41 1332认证过程: 服务器:对客户端的每次请求,每一次都生成 ... -
在IIS中用ISAPI_Rewrite Lite版配置虚拟主机支持二级域名
2007-10-23 11:49 3203为二级域名的问题搞了2天,狂郁闷。。。。先是用程序,感觉太累赘 ... -
在Apache中配置使用Asp.net(记录备忘共享)
2007-10-17 14:38 4850本来是出于好奇,Apache中居然也能支持Asp一把了。。。呵 ... -
学写一个程序开发框架(PHP),灵感来源于ROR
2007-08-30 12:20 2550先向各位高手们请个安。 我对ROR的了解很浅,仅仅是看了一遍它 ... -
盗站与采集,分析及反制之术PHP实现
2007-08-10 23:53 3562一般的说,只要做过站 ... -
具有xhr对象管理功能的Ajax简易封装(Majax)
2007-07-20 21:57 3355内部由一个数组缓存工作中的xhr对象,类似于“池”,当一个请求 ... -
一个极简化的Ajax封装,回调接口和浏览器兼容性较好
2007-06-23 22:58 9534>>注意:请下载后面(9楼)的v1.1正式版。如果 ... -
我的汉字输入法编码方案
2007-05-28 22:24 2664很早就有了这个东西,因为一直没学会编写输入法程序,所以就没有拿 ...
相关推荐
Base64字符集由大小写字母、数字以及"+"和"/"组成,末尾可能还需要添加一个等于号("=")进行填充。 在易语言中实现Base64编码,通常会使用到内置的字符串处理函数或第三方库。这些函数或库可以将任意字符串转换成...
AES是一种对称加密算法,广泛应用于数据加密,确保数据在传输或存储时的安全。在微信小程序中,可能会用到AES来保护用户的敏感信息,如密码、身份验证令牌等。AES加密过程包括选择密钥、加密明文和解密密文三个步骤...
base64的js实现 javascript实现base64加密算法
在这个场景中,我们讨论的是一个纯JavaScript实现的Base64加密解密工具类,它无需依赖其他外部JavaScript库,因此非常适合在各种环境中使用,特别是对于那些对文件大小和加载速度有严格要求的项目。 Base64加密,也...
因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,解密的任意组合,当然也可自己简单改下参照序列顺序,使自己的加密解密变为独一的,网上无法使用工具解密出正确的数据。熟悉二进制的可...
- 对于敏感数据,应当使用真正的加密算法,如AES,结合Base64编码,确保数据的安全性。 综上所述,`js实现的Base64的加密解密方法`涉及了Base64编码的基本原理,JavaScript中的内置API,自定义实现的必要性和应用...
为了解决这些问题,开发者通常会使用第三方库,如`base64-js`库,这是一个轻量级的JavaScript库,提供了更全面的Base64编码和解码功能,包括对Unicode字符串的支持。 例如,`base64-js`库中,你可以这样使用: ```...
Base64加密算法java版
BASE64是一种常见的编码方式,它不是加密算法,但常用于在网络上传输二进制数据,因为HTTP协议和许多文本编辑器只能处理ASCII字符。在JavaScript(JS)环境中,我们可以轻松地实现BASE64的编码和解码功能。 标题...
在这个"base64加密插件(js)"中,我们看到它是基于JavaScript实现的,这意味着它可以应用于Web前端,对数据进行加密处理,确保数据的安全性。 JavaScript是一种广泛使用的脚本语言,它在浏览器环境中运行,负责网页...
总的来说,JavaScript中的Base64编码是一个实用的工具,适用于多种场景,但必须谨慎处理,特别是在涉及到数据安全时。在实际开发中,选择合适的库和方法,确保代码的稳定性和兼容性,是至关重要的。
MD5、Base64和SHA-256是三种常见的加密算法,它们在JavaScript中都有对应的实现。 **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,能够将任意长度的数据转化为固定长度的128位(16字节)摘要...
了解了Base64编码的基本原理和应用场景后,我们可以使用各种编程语言(如Python、Java、JavaScript等)的库函数轻松实现Base64的编码和解码。在实际开发中,正确理解和使用Base64编码对于数据传输和存储至关重要。
常见的加密算法有Base64、MD5和SHA1。这些方法在不同的场景下有着各自的用途和特点。 1. **Base64编码**: Base64是一种用64个字符来表示任意二进制数据的方法。它不是一种加密方式,而是一种编码方式,主要用于在...
以上就是关于使用JavaScript实现Base64、MD5和SHA1密码加密的知识点,这些技术在Web开发中常用于数据安全和身份验证。但请记住,对于密码存储,应当优先考虑使用专门设计的密码哈希算法,以提供更好的安全保护。
开发者可以利用JavaScript库,如crypto-js,来实现3DES、MD5和Base64的功能。这些库提供了简单的API接口,使得开发者能够轻松地进行加密和解密操作。 对于3DES,开发者需要指定一个密钥,然后调用对应的encrypt和...
本文将深入探讨Base64编码原理,JavaScript中的实现方式,以及如何封装一个Base64的加密解密工具。 Base64编码的基本原理是将每3个字节(24位)的数据拆分为4组,每组6位,然后将这6位二进制数据转换为其对应的...
在微信小程序中,我们可能需要对敏感信息进行加密处理,Base64就成为了一个简单实用的工具。本篇将详细介绍微信小程序中的Base64加解密以及相关的使用方法。 Base64是一种基于64个可打印字符来表示二进制数据的编码...
Base64编码将任何可打印的ASCII字符转换为一个由64个可打印字符组成的特定字符集,这64个字符包括大小写字母、数字和两个特殊符号`+`和`/`,并且通常在每76个字符后添加一个换行符,以便于邮件系统的处理。...
资源包中的"base64加密解密测试.html"文件很可能包含了一个完整的JavaScript Base64库,提供了自定义的Base64编解码功能。这个库可能包含了以下知识点: 1. **Base64编码**:讲解如何使用JavaScript进行Base64编码...