王朝百科
分享
 
 
 

平形加密法

王朝百科·作者佚名  2010-02-08  
宽屏版  字体: |||超大  

“平形”加密法

——当事物失去特征时,你将无法描述,也无从辨别。

文章中,当某些字被替换成不同的字后,你如何理解文章的内容?两种可能:一是被误导,二是不知所云。当大量常用的字都被替换了,你能有办法复原文章的内容吗?答案是:No passable!因为它很可能是另一篇文章。

加密原理

用一个字串(密钥)循环平移文章中每一个字,使得有含义的文章变成无含义或它义的文字。由于平移后密文仍为正常的文字,所以密文仍可以像普通文本一样正常传输、压缩、甚至加密。

[注]:这一般仅适用于字含义的加密,对于含有逻辑结构信息的代码文档意义不大。

加密要素

原文 + 密钥 + 字表 = 密文

字表:值的集合,用于枚举需要加密的字符。变数:字、字数、字序。

算法约定

(以最简单为原则)

密钥为值数组,数组单元称为密钥字,单元值称为钥值。

原文中的处于字表内的字称为待密字,该字在字表中的序号称为字值。

逐字地,用密钥钥值对待密字值加值变换,取模值为替换字在字表中的位置,替换字即是密字。

密钥值串循环使用(连续,无跳跃),直至待密字处理完毕。

补充说明

待密字值其实也可以直接采用字符本身的值,同时约定一个固定的字表,如中文GB2312的一级简码区汉字,这样会使得计算更简单。但如此字值就与编码有关,同时字值也必须是连续的。为通用性,此设计字表为任意的字集合,字值取它在字表中的序号。

字表方案

整集

即原始文本包含的所有字符。依不同的文档而有区别,但一般地,英文文本应该肯定包含[a-zA-Z]52个字母。

特集

任意指定的字集。可能仅包含一些用户觉得必要的字的一个小的集合。或者,随机的取整集的一部分。(推荐)

标点集

文章中,常用标点和空格(西方语言)起着断句和分词的作用,这明确地表达了文本的结构信息,明显地,密文应该隐藏这一信息。所以作为推荐,这是一个应该必须包含的集合:

半角空格、半全角逗号[,,]、句号[.。],计5个字符。

可选的,还可以包含:

冒号(::)、引号("“”)、分号(;;)、顿号(、)、书名号(《》)等等。

另外,根据文本的特点或需要,还应该包含如下有明显前后关联意义的符号:

->标示前后可能是数字的百分号(% %)、运算符(+ - * /)、货币符号;

->在现代信息世界里传达URI信息的正斜杠(/)、邮件地址符(@);

->代码世界中常用的逃逸字标识符反斜杠()、xml实体标识符(&)等等。

全集

包括文档所属语言的全部有效字符,不推荐。它除性能不佳外,加密效果(迷惑性)也不好。

子集

相对于规范的编码系统命名,如中文的一级简码区汉字。

补充说明

由于算法极为简单,如果字表公开,我们可以直接从原文和密文得出密钥。而在某些情况下,字表是应该公开和通用的。所以,我们不应该去加密已经被知道原文的信息,因为这样就等于告知了我们用于变形的密钥(呵呵,当然,既然原文已经被知晓,那也就没有去加密的必要了)。

加密的原始信息应该是破解者未知的,或是可变的。如银行帐号,它可能由可变的数字和固定的前缀字符组成,而前缀字符肯定广为人知,如果对这固定的前缀字符也加密,同时用于该算法的字表为公用,当破解者怀疑你的密文是银行帐号时,他就可以轻易地解出用于这几个固定字符的密钥。

应用提示

1、不推荐字表中包含换行符。

换行符普遍存在于一般文本中,它让文本看起来清晰而有条理,但由于字符变换的随机性,所以会有大量的换行符被替换成非换行符,使得变形后的密文行数大量减少。这样既使得文本杂乱,同时也降低了密文的迷惑性。

如果换行符不在替换的候选字符中(字表),我们甚至可以编辑密文——如删掉多余的空行而不会影响后来的解密过程。(当然,可以删掉所有不在字表中的字符而对解密无影响,但要记住众多不在字表中的字符应该是困难的,而且也好像无此必要?)

2、加密后的文件大小可能会有些变化(虽然字符数没变),它取决于文本的编码环境和替换字有哪些。

在多字节编码环境中(如MBS或UTF-8),如果我们在一个字表中同时包含单字节字符和多字节字符,则对于单字节字符较多的原始文本,变形后的密文文件会增大。而对于多字节字符占绝大部分的原始文本,则很可能密文文件会稍小一些(不会小太多,因为相对于单字节字符,多字节字符数量要庞大得多)。

所以,如果很在意文件的大小,可以另外定义一个只包含单字节字符的字表,而多字节字符定义在另一个字表中,两者不同字。然后对原始文本参照两者各处理一次即可。这样,文件大小基本上就不会有多少变化了。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有