续上一篇博文《几个文字加密的简洁算法和一些个人的想法》,不说开场白了,继续哦……
算法2:字符错位法
——相当于把一篇文章的字全部打乱随机重排。
(function() {
//
// 字符错位-加密:
// 密钥长 ≥16,循环步长 10, 末尾余量反向对齐错位。
// 特点:
// 1. 密文为字符串中现有的字符,不易被检测出已加密;
// 2. 可适用于任意字符集;
// 3. 不增加文本的长度,即密文长度等于原文长度。
// 缺点:
// 1. 原文不应有固定特征,如 html 标签,否则易破解;
// 2. 原文长度必须不小于密钥长度。
// 推荐:
// 适用于较长的文本处理,一般为文章的正文段落。
//
// @param array key - 0-N 连续数字随机排布
// @return string - 加密后的字符串
//
String.prototype._displace = function( key )
{
if (key.length < 16 || this.length < key.length)
return false;
var _pos = key.length, _buf = new Array(_pos);
var _sect = function(s) {
for (var _i=0; _i<key.length; ++_i) {
_buf[_i] = s.charAt(key[_i]);
}
return [ _buf.slice(0, 10).join(''), _buf.slice(10).join('') ];
};
// _bs: back-string
var _arr = _sect(this), _to = _arr[0], _bs = this.length - _pos;
while (_bs >= 10) {
_arr = _sect( _arr[1] + this.substring(_pos, _pos + 10) );
_pos += 10;
_to += _arr[0];
_bs = this.length - _pos;
}
_to += _arr[1];
// 末尾余量处理
if (_bs > 0) {
var _ep = this.length - key.length;
_arr = _sect(_to.substring(_ep) + this.substring(_pos));
_to = _to.substring(0, _ep) + _arr.join('');
}
return _to;
};
//
// 字符错位-解密: 从尾至头逆向计算
//
// @return string - 解密后的字符串
//
String.prototype._undisplace = function( key )
{
if (key.length < 16) return false;
var _buf = new Array(_pos),
_s2 = key.length - 10, // 重叠长
_pos = parseInt((this.length - key.length) / 10) * 10 + key.length;
var _sect = function(s) {
for (var _i=0; _i<key.length; ++_i) {
_buf[key[_i]] = s.charAt(_i);
}
// [重叠段, 有效段]
return [ _buf.slice(0, _s2).join(''), _buf.slice(_s2).join('') ];
};
return (function(s) {
var _to = '', _arr = null;
// 末尾余量
if (_pos < s.length) {
_arr = _sect(s.slice(-key.length));
_to = _arr[1].slice(_pos - s.length);
s = s.slice(0, -key.length) + _arr[0] + _arr[1].slice(0, _pos - s.length);
}
_pos -= key.length;
_arr = _sect(s.slice(_pos));
_to = _arr[1] + _to;
_pos -= 10;
while (_pos >= 0) {
_arr = _sect( s.substring(_pos, _pos + 10) + _arr[0] );
_pos -= 10;
_to = _arr[1] + _to;
}
return _arr[0] + _to;
})(this);
};
})();
用法:
<script language="JavaScript">
var _str = "中文字符串和 English char string 的 JS 加密 Test. 包含一些标点符号,*@%! 等。";
var _k2 = [2,15,3,1,4,10,5,9,8,6,14,13,7,0,12,11];
var _enc2 = _str._displace(_k2);
alert(_enc2);
alert(_enc2._undisplace(_k2));
</script>
特点:
1. 密钥数组值为 0- N 的连续值,但排列是任意的(即取排列的“任意性”为密钥的不可知性)。
2. 因为存在重叠段,字符的错位移动是在整个字符串范围内进行,加密性好于没有重叠的分段错位方式。
3. 虽然密钥的长度也是一个变数(即长度本身的不可知性),但加密强度主要取决于增长密钥带来的数据随机性(N! --N 的阶乘)。
分享到:
相关推荐
原理上对原字符串的每个字符做了数值转换,在加上加密因子,经过颠倒错位后再形成加密后数值,解密时再颠倒转换回来。 比较简单,现在用于对安全性要求不高的应用里。 原来发了一份,资源分不小心设高了。。呵呵,...
首先,我们需要导入必要的命名空间,包括`System.IO`用于文件操作,`System.Security.Cryptography`用于加密算法,以及`System.Text`用于处理字符串。在代码中可以看到,`Default2`类是ASP.NET的一个Web表单页,其中...
C语言的经典算法。 第一篇 基础与提高 实例1利用库函数编写基本显示程序 实例2变量属性 实例3运算符与类型 实例4关于程序结构 实例5显示函数曲线图 实例6二分法选代的应用 实例7多变的立方体 实例8...
在计算机科学中,处理大数是常见的问题,尤其是在加密算法、数学计算或金融计算等领域。对于20位左右的大数相乘,我们可以通过设计特定的算法来高效地完成。这里介绍一种基于数组表示的大数相乘的方法。 首先,我们...
修改高级表格支持库,在双击单元格进入编辑状态后,不能收到第一个“字符输入”事件的BUG。 2. OpenGL支持库中的部分英文名称常量已改为中文,并统一在所有常量名称之前加前缀“GL_”,以减少与其它库的冲突机率。...
1. **唯一密钥**:每个明文字符都与一个不同的密钥字符进行异或,因此密钥必须是随机的、唯一的,且至少与明文一样长。如果密钥被重复使用,那么密码分析者可以通过比较不同消息的密钥部分来破解加密。 2. **完美...
1. `str_replace()`: 这个函数用于替换字符串中的特定字符,可以用于将普通文字替换为火星文。 2. `rand()`: 生成随机数,可用于随机选取词库中的火星文。 3. `explode()`: 将字符串分解为数组,方便对每个单词进行...
在数论和加密算法中有着广泛应用。 2. **巴什博弈模板**:又称“猜数字游戏”,是博弈论的一个经典例子,玩家轮流猜测一个特定范围内的数字,通过对手的操作来推断正确答案。 3. **博弈论之Grungy数及sg函数**:在...
4. **将数组分成几个递增序列**:这可能涉及到动态规划和排序算法,需要理解如何根据数组的元素划分递增序列。 5. **凸多边形**:涉及平面几何,可能需要计算多边形的面积、周长,或者判断一个点是否在多边形内部。...
在计算机科学中,尤其是数据结构和算法领域,大数操作是重要的组成部分,尤其是在处理金融、加密或分布式计算等场景。 在大数相乘的课程设计中,主要分为以下几个步骤: 1. **输入阶段**:输入的大数被存储在一维...
这个过程可能涉及到OCR(光学字符识别)技术,尤其是处理包含扫描图像的PDF时,OCR可以识别并转换图像中的文字。转换过程中,转换器会尽可能地保留原始PDF的布局和样式。 2. 应用场景: - 编辑需求:当用户需要修改...
- **错位问题优化**:确保每个消息视图的宽度固定,并且使用LinearLayout的weight属性或者GridLayout等来保持界面的一致性。 #### 3. 视频、音频的上传 - **多媒体文件选择**:提供用户选择本地视频或音频文件的...
6. **随机性和独特性**:使用无规律的字符组合,可以是单词的错位排列或者添加特殊符号。 7. **记忆技巧**:可以通过在密码中添加首尾符号,或者打乱单词顺序并插入数字来提高安全性,例如"$ideablue)"。 8. **...
1. 数据错位:编码后的字符串可能因为字节对齐问题,导致数据的错位,使得解码时无法恢复原始信息。 2. 解码失败:在解码过程中,由于字节长度不对称,可能导致解码函数无法正确识别和处理,进而抛出错误或返回无效...
·全自动分析,内外链接自动转换、图片地址、css、js,自动分析CSS内的图片使得页面风格不丢失 ·广告标签,方便在规则里直接替换广告代码 ·支持自定义标签,标签可自定义内容、自由截取、内容正则截取。可以放在...
7. **代码混淆**:为了防止反编译,开发者可能会对PE文件进行混淆处理,比如改变代码顺序、使用加密算法等。 8. **PE文件签名**:对于数字签名的PE文件,修改任何内容都会导致签名无效,需要重新签名以确保软件的信...