日期:2014-05-16 浏览次数:20362 次
(function() { var _Charset = { 'cjk': [ 'u4e00', 'u9fa5' ], // 汉字 [一-龥] 'num': [ 'u0030', 'u0039' ], // 数字 [0-9] 'lal': [ 'u0061', 'u007a' ], // 小写字母 [a-z] 'ual': [ 'u0041', 'u005a' ], // 大写字母 [A-Z] 'asc': [ 'u0020', 'u007e' ] // ASCII 可视字符 }; // // 加密:字符码在字符集内平移。 // 特点: // 1. 字串越短加密效果越好,若短文不大于密钥长度,则不可破解。 // 2. 不增加文本的长度,即密文长度等于原文长度。 // 缺点: // 1. 一次只能对“一个”连续值的字符集进行处理,而一般字符串中会 // 同时包含多个字符集中的字符。 // 2. 汉字平移后的字较生僻,明显体现出已被平移处理; // 推荐: // 适于特定类型的短字符串的处理,如:时间串、名称、标题等。 // // 参数 cset: // 用 Unicode 表示 -- 4 位十六进制,前置‘u’, // 可用预定义的 _Charset 属性名标识,默认为 cjk。 // // @param array na - 平移量数组 // @param array cset - 字符集名/范围 [ 起点, 终点 ]) // @return string - 平移后的字符串 // String.prototype._shift = (function() { var _cset, _id, _beg, _len, _exp; return function( na, cset ) { switch (typeof cset) { case 'undefined': cset = 'cjk'; case 'string': _cset = (cset == _id) ? null : _Charset[cset]; break; default: _cset = cset; } if ( _cset ) { _beg = parseInt(_cset[0].substring(1), 16); _len = parseInt(_cset[1].substring(1), 16) - _beg + 1; _exp = RegExp('[\\' + _cset[0] + '-\\' + _cset[1] + ']', 'g'); _id = cset; } var _sz = na.length, _cnt = 0; return this.replace(_exp, function(s) { var _c = s.charCodeAt(0) - _beg; return String.fromCharCode((_c+na[_cnt++%_sz])%_len + _beg); }); }; })(); // // 解密:字符码在字符集内平移-恢复。 // String.prototype._unshift = (function() { var _cset, _id, _beg, _len, _exp; return function( na, cset ) { switch (typeof cset) { case 'undefined': cset = 'cjk'; case 'string': _cset = (cset == _id) ? null : _Charset[cset]; break; default: _cset = cset; } if ( _cset ) { _beg = parseInt(_cset[0].substring(1), 16); _len = parseInt(_cset[1].substring(1), 16) - _beg + 1; _exp = RegExp('[\\' + _cset[0] + '-\\' + _cset[1] + ']', 'g'); _id = cset; } var _sz = na.length, _cnt = 0; return this.replace(_exp, function(s) { var _c = s.charCodeAt(0) - _beg; return String.fromCharCode((_c-na[_cnt++%_sz]%_len+_len)%_len + _beg); }); }; })(); })();
<script language="JavaScript"> var _str = "中文字符串和 English char string 的 JS 加密 Test. 包含一些标点符号,*@%! 等。"; var _k1 = [2034,85,45,22,65,213,65,398,356,1709,354]; var _enc = _str._shift(_k1); alert(_enc); alert(_enc._uns