- 浏览: 141563 次
- 性别:
- 来自: 西南边陲
最新评论
-
leafxf:
这个和直接引用js有多大不同和优点?
近乎完美的简单 JS 跨域解决方式 --window.name -
zhangyg:
我怎么不行,我在执行到 var _getData = func ...
近乎完美的简单 JS 跨域解决方式 --window.name -
ray_linn:
akane 写道以后都走网上电子书城 楼主的问题就解决了
又 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感 -
asd:
知识库还是很好的,我不知道这里面的商业模式是什么,但是百度文库 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感 -
lkj107:
支持知识产权保护,BS百毒好好看看google是如何达到共赢的 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感
在上一篇文章《普通 http 网络下数据的安全传输(设计原理)》中,我曾经推荐浏览器和服务器之间的加密通讯宜采用《几个文字加密的 JS 简洁算法(续2)--进制乱序法》中提及的算法,但那个算法有密文增长较多的缺点。考虑实用性,这里作了完全重新的设计,可以自动识别单双字节字符,单字节字符用 2 位 16 进制表示,双字节字符用 3 位 41 进制表示,从而降低了密文的增长幅度。
算法 3: 进制乱序法 -- 改良版
用法:
注: _k3 是一个 [0-61] 的互斥值随机排列数组,可用 PHP 命令行执行如下代码得到。
说明:本人原创,代码可以自由使用!
- 如认为汉字占用 2 个字节,则中文文本加密后的密文增长幅度为 1.5 倍——与 UTF-8 存储汉字占用字节相同;
- 英文文本加密后密文的增长原理上是 2 倍,但由于空格是英文中的词汇分界符,在英文文本中大量存在,而空格是不加密的(只占 1 字节),故实际的密文增长并没那么多。
- 综合评估,在中英文混合的文章中,密文的增长大概在 1.6 ~ 1.8 之间,这并不算严重(如果对密文的增长很敏感,可以用另外两个不增长密文的算法)。
算法 3: 进制乱序法 -- 改良版
(function() { // // 密文字符集(size:62)。 // [0-9A-Za-z] // var _hexCHS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; // // 密文字符顺序映射。 // 顺序与 _hexCHS 同,从 0 开始。 // var _hexTBL = { '0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, 'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15, 'G':16, 'H':17, 'I':18, 'J':19, 'K':20, 'L':21, 'M':22, 'N':23, 'O':24, 'P':25, 'Q':26, 'R':27, 'S':28, 'T':29, 'U':30, 'V':31, 'W':32, 'X':33, 'Y':34, 'Z':35, 'a':36, 'b':37, 'c':38, 'd':39, 'e':40, 'f':41, 'g':42, 'h':43, 'i':44, 'j':45, 'k':46, 'l':47, 'm':48, 'n':49, 'o':50, 'p':51, 'q':52, 'r':53, 's':54, 't':55, 'u':56, 'v':57, 'w':58, 'x':59, 'y':60, 'z':61 }; // // 进制转换加密法 // 原理: // 用 [0-9A-Za-z] 62 个字符的随机排列作为进制表对字符的值进行转换。 // 特点: // 1. 密文为数字和大小写英文字母,及原有的 [\s\n\r]; // 2. 增加了密文字符的平移操作,提高加密强度; // 3. 可自动识别单双字节字符并进行相应编码; // 4. 双字节字符用 3 位 41 进制表示,最大可表示 68920 的字值; // 5. 单字节字符用 2 位 16 进制表示,最大可表示 255 的字值; // 6. 空白、换行和回车 [\s\n\r] 保持原样。 // 缺点: // 密文会比原文长,中文视宽增长 1.5 倍(一个汉字算 2 字节宽); // 考虑空白和换行/回车不处理,英文增长 < 2 倍。 // 推荐: // 可用于任意类型的文本加密,由于密文为规范的 [\w],适于各类环境。 // // 参数: // key[0-57) 间的值小于 62 且唯一,其后的值可任意和重复; // key[0-16) 为 16 进制字符表,key[16-57) 为 41 进制字符表。 // // @param array key - [0-61] 互斥值数组,length >= 57 // Hexch = function( key ) { if (key.length < 57) { throw new Error('the key is too short.'); } // 平移密钥 this._sz = _hexCHS.charCodeAt(key[15]) % (key.length-20) + 10, this._ks = key.slice(-this._sz); for (var _i=0; _i<this._sz; ++_i) { this._ks[_i] = _hexCHS.charCodeAt(this._ks[_i]%62); } this._k16 = [], this._k41 = []; this._t16 = {}, this._t41 = {}; for (var _i=0; _i<16; ++_i) { this._k16[_i] = _hexCHS.charAt(key[_i]); this._t16[this._k16[_i]] = _i; } for (var _i=0; _i<41; ++_i) { this._k41[_i] = _hexCHS.charAt(key[_i+16]); this._t41[this._k41[_i]] = _i; } }; // 加密 Hexch.prototype.enc = function( s ) { var _k16 = this._k16, _k41 = this._k41, _ks = this._ks, _sz = this._sz, _cnt = 0; return s.replace(/[^\s\n\r]/g, function( ch ) { var _n = ch.charCodeAt(0); return (_n <= 0xff) ? _k16[parseInt(_n/16)] + _k16[_n%16] : _k41[parseInt(_n/1681)] + _k41[parseInt(_n%1681/41)] + _k41[_n%41] // 平移 }).replace(/[0-9A-Za-z]/g, function( ch ) { return _hexCHS.charAt((_hexTBL[ch] + _ks[_cnt++%_sz]) % 62); }); }; // 解密 Hexch.prototype.dec = function( s ) { var _t16 = this._t16, _t41 = this._t41, _ks = this._ks, _sz = this._sz, _cnt = 0; var _s = s.replace(/[0-9A-Za-z]/g, function( ch ) { return _hexCHS.charAt((_hexTBL[ch] - _ks[_cnt++%_sz]%62 + 62) % 62); }); var _rs = ''; for (var _i=0; _i<_s.length;) { var _ch = _s.charAt(_i); if (/[\s\n\r]/.test(_ch)) { _rs += _ch; ++_i; } else if (_t16[_ch] !== undefined) { _rs += String.fromCharCode(_t16[_s.charAt(_i)]*16 + _t16[_s.charAt(_i+1)]); _i += 2; } else { _rs += String.fromCharCode(_t41[_s.charAt(_i)]*1681 + _t41[_s.charAt(_i+1)]*41 + _t41[_s.charAt(_i+2)]); _i += 3; } } return _rs; }; })();
用法:
<script language="JavaScript"> var _str = "中文字符串和 English char string 的 JS 加密 1234. 包含一些标点符号,*@%! 等。"; var _k3 = [61,37,44,31,34,7,24,6,43,12,27,3,25,29,60,33,35,41,58,2,51,49,9,5,59,11,42,32,22,40,4,57,50,38,8,56,21,19,52,53,16,28,1,26,47,17,54,46,10,23,55,13,14,20,15,36,18]; var _o = new Hexch(_k3); var _enc3 = _o.enc(_str); alert(_enc3) //7Eg9K4UTzvBzgBPPTC eEb6xHzJHQIKEq jIhRYSpl MNCfJqxNzsHK KlP hmuo 61BNLv Nhcvd4g9cr aDkCWBJXPgR6y9iiG6GRQx4PT5AYatm1rsS rnQxSr alert(_o.dec(_enc3));
注: _k3 是一个 [0-61] 的互斥值随机排列数组,可用 PHP 命令行执行如下代码得到。
$a=range(0,61); shuffle($a); echo join(',', $a); // _k3 只需前 57 项元素。
说明:本人原创,代码可以自由使用!
发表评论
-
一个类似 Base64 但真正实现了加密的 JS 文字加密算法
2011-02-16 15:11 3009算法的基本原理和 Base64 ... -
普通 http 网络下数据的安全传输(设计原理)
2011-02-10 16:32 7876曾几何时,https 安全但 ... -
近乎完美的简单 JS 跨域解决方式 --window.name
2011-02-04 22:47 26035当然,“近乎完美”仅仅是个人观点,但如下所述,它确实简单而颇有 ... -
几个文字加密的 JS 简洁算法(续2)--进制乱序法
2011-01-31 22:44 2370续前一篇博文《几个文字加密的简洁算法和一些个人的想法》——字符 ... -
几个文字加密的 JS 简洁算法(续)-- 字符错位法
2011-01-26 12:28 3819续上一篇博文《几个文字加密的简洁算法和一些个人的想法》,不说开 ... -
几个文字加密的 JS 简洁算法(字符平移法)和一些个人的想法
2011-01-22 21:43 7872未深入了解过数据加密 ... -
几个文字加密的简洁算法和一些个人的想法
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很早就有了这个东西,因为一直没学会编写输入法程序,所以就没有拿 ...
相关推荐
在本实验中,我们关注的是如何使用DES算法进行加密,并将结果以16进制的形式展示出来。以下是关于DES加密算法及其在16进制显示中的相关知识。 首先,DES算法基于Feistel网络结构,它将原始明文分为左半部分(L0)和...
在计算机科学中,进制转换是一个基础且重要的概念,它涉及了不同数值系统间的转化,这对于理解和处理二进制、八进制、十进制和十六进制等不同进制的数字至关重要。下面我们将详细探讨易语言和2-62进制转换的相关知识...
大整数任意进制转换是一个核心概念,尤其是在处理大量数据、加密算法以及高级编程语言中。本文将深入探讨这个主题,结合"大整数任意进制转换(2-62进制)"的软件特点,解析其中涉及的关键知识点。 首先,我们来理解...
标题和描述均提到了在VB(Visual Basic)中进行不同进制数字之间的转换,包括十进制、八进制、十六进制以及二进制之间的转换。这些转换在编程领域非常常见,尤其是在处理数据存储、网络通信、加密解密算法等场景下。...
而62进制可能比较少见,它通常是在特定场景下为了扩展二进制或十进制表示能力而采用的一种进位制,比如在网络编码、加密算法或者自定义数据格式中。这个转换器的用途可能是帮助开发者在这些领域进行数值转换,以便于...
在实际工作中,当涉及到对内存地址的解析、数据压缩、加密算法的实现等场景时,熟悉进制转换能够帮助技术人员更加高效和精确地处理信息。 在计算机科学的实践中,进制转换不仅是将一种数制转化为另一种数制那么简单...
这种转换在计算机科学、网络编码、加密算法和数据表示等多个领域都有应用。 二进制是计算机的基础,所有计算都是在二进制系统上进行的,因为它只有两个状态:0和1。这对应于电子设备中的“开”和“关”。二进制系统...
JavaScript的加密算法类库Crypto-js是前端开发中用于安全数据处理的重要工具,它提供了一系列的加密和解密功能,使得开发者无需后端支持就能在浏览器环境中实现数据的安全传输和存储。这个库支持多种常见的加密算法...
### RFID二进制防碰撞算法实现与优化 #### 引言 射频识别(RFID)技术作为一种非接触式自动识别技术,在工业自动化、商业自动化和交通运输控制管理等多个领域展现出广泛应用前景。其核心优势在于非接触目标识别、...
RAS加密算法的----——————-C语言实现
常见的对称加密算法有DES(Data Encryption Standard)、3DES(Triple DES)、AES(Advanced Encryption Standard)等。在这种方法中,由于密钥的共享,它比非对称加密(如RSA)在速度上更快,适合于大量数据的加密...
AES,全称Advanced Encryption Standard,即高级加密标准,是一种广泛应用于现代网络安全的对称加密算法。它是基于块密码,每个块大小为128位,同时支持128、192和256位的密钥长度。AES在1997年被提出来作为DES...
- **安全分析**:在网络安全领域,分析病毒、木马的二进制代码,或者对加密数据进行逆向工程时,16进制编辑器是必不可少的工具。 - **文件格式分析**:对于非标准格式的文件,通过16进制编辑器可以探究其内部结构,...
微信小程序加密数据解密算法wechat-aes-sample-master.zip
ASCII码表包含了128个字符(从0到127),每个字符都有其对应的十进制、八进制和十六进制表示方式。此外,还有一部分控制字符用于计算机内部处理或控制设备操作,如换行、回车等。 #### 常用ASCII码字符详解 1. **...
针对十进制数运算的特点,在加密算法中定义了三种新的运算,并从理论上证明新的运算能保证十进制加密算法的可逆性。将该算法应用于短分组加密仿真系统中的结果表明,算法具有良好的密码学特性,加解密的各项扩散率...
Java 中的 3DES 加密解密示例(封装 byte 数组和 16 进制字符串互转) 在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES ...
`AesEncryptUtil.java`可能包含了与`aes.js`中加密算法相对应的解密方法,确保前后端数据交互的安全性。 使用这些工具时,开发者需要按照以下步骤操作: 1. 引入`aes.js`和`pad-zeropadding-min.js`到HTML页面中。...
本篇文章将详细阐述如何使用JavaScript语言实现SHA-256加密算法。 JavaScript实现SHA-256加密算法的实例主要涉及以下几个关键部分: 1. **位运算基础**:JavaScript提供了位运算符,包括按位与(&)、按位或(|)、...
一共6层加密 1。字符----》ASCII ...由于本人是菜鸟,所以这个加密算法可能很烂,请见谅! 有一部分文字和字符转化后可能无法复原,如果能解决请联系我,谢谢! 邮箱:834449164@qq.com QQ:834449164