一种以汉字作为密码的对称密码算法的实现方法在贵州毕节诞生。该方法的一轮加密包括如下步骤:
第一步:将所有能收集到的汉字和符号进行n(n5)位数的编码赋值,形成一个数据库,这个数据库是一个非标准化的计算模型。在这个模型中,所有汉字或符号都被当做随机对象,并将其编为原始“密本”;n为5的自然数;n小于5时,会使数据库中的汉字(符号)总量减少,调取汉字或符号替代数字时,要按在这个模型中,所有汉字(符号)都被当做随机对象。并按一定方式将其编为原始“密本”。
第二步:每次在需要编写密本时,在数据库中将所有的汉字(符号)随机搅乱,调取出所需要的汉字(符号)总量,比如需要10000个汉字(符号),我们把它称为子数据库。
第三步:将子数据库中的所有汉字(符号)搅乱后随机平均分为10份,得到10组不同的汉字(符号)序列。以10000汉字(符号)为例,每个序列组共有汉字(符号)1000个,每组汉字(符号)序列内的所有汉字(符号)不重复。
第四步:将每个汉字(符号)序列用0~9这10个不同数字按顺序进行规约。比如A组规约为0,B组规约为1,以此类推,最终得到原始密钥0123456789。注意:此次规约的数字排列即为原始密钥,须按序排列。
第五步:将明文转换为密文。首先将通信密钥与原始密钥从左至右进行一一对应,如:
原始密钥:0 1 2 3 4 5 6 7 8 9
通信密钥(假设):6 5 7 8 2 1 0 0 1 5
根据“首次定义,虚实对调;重复出现,视为放弃;缺失数字,以虚代缺”的处理原则,将通信中的明文对应的5位数数字码在原始密钥对应的汉字及符号序列中随机调取(查询)汉字(符号),便得到一个随机的汉字(符号)应答,调取(查询)完毕后,便得到一组由一个汉字(符号)变成5个汉字(符号)组成的密文。比如,前述的赵(37592)变成了赵(天阳李明日);如果用相同方法再来一次随机调取,赵(37592)可能又变成赵(王旭山玉重)了,完全变成了互不相干的文字(符号),这样就实现了明文的第一次加密,同时实现了真正意义上的“同字不同码,同码不同字”。
第六步:将转换的密文发出去以后,接收方将收到的密文根据双方通信时约定的密钥(规约顺序)逆向对应,映射出生成明文的数字代码,再对应本次编写密本得到的子数据库中汉字(符号),密文就转换为明文了。
以上只是进行一轮加密的情况。由于一个汉字通过一轮加密生成5个汉字,这5个汉字又分别对应的有其它数字,数字又对应汉字,通过两轮转换后,一个汉字转换成了25个汉字,如此循环往复,指数级增长。根据加密需要,理论上一个汉字可以转换成无穷多个汉字。
如图1所示,以明文“我爱你”为例,取n=5,我们假定得到“我”的数字编码为36551;“爱”03275;“你”46210。按如下步骤实现明文转密文:
首先,将明文数字化,“我爱你”便成了“365510327546210”。发信方发信前根据自己的需要设定新密钥,即得到一串随机数字符,比如“6578210015”,这串随机数字符就是本次通信的密钥,也就是“实位密钥”。
其次,发信方根据设定的本次通信密钥,按照“首次定义,虚实对调;重复出现,视为放弃;缺失数字,以虚代缺”的处理原则,对应转换得到的密文假定为我(侵让享宿寅),爱(支力劳句姣),你(哄官鼓缶蜂)。连在一起“我爱你”就转换成了“侵让享宿寅支力劳句姣哄官鼓缶蜂”,“侵让享宿寅支力劳句姣哄官鼓缶蜂”成了“我爱你”的密文, 发信方将密文通过公开渠道发给对方(接收方)后,对方一开始根本不可能知道“侵让享宿寅支力劳句姣哄官鼓缶蜂”是“我爱你”。接收方收到密文后,按下述步骤进行解密:
首先,将收到的密文在密本中查得密文对应的原始密钥位,如查得密文对应原始密钥位的情况为“侵3、让0、享1、宿1、寅5、支6、力3、劳4、句2、姣1、哄4、官0、鼓4、缶5、蜂6”。
其次,将发信方提供的密钥(通过用公开密钥密码技术在通信双方之间传递的秘钥6578210015与原始密钥0123456789从左至右进行一一对应,可以看出,本次通信密钥中缺少“3、4、9”。根据原则推知,侵3来自于原始密钥位3;让0来自原始密钥位6;享1来自原始密钥位5;宿1来自于原始密钥位5;寅5来自于原始密钥位1;按照5位数编码,这5个汉字对应的编码为36551,在原始密本中查找编码36551对应的汉字为“我”,密文“侵让享宿寅”就转换为明文“我”了。其余类推。
以上的密钥采用的是数字,还可以采用随意设想出的汉字甚至是符号,或者一句话来作为密钥,字数在10字以内,也可以不限。方法是需先利用密本原始密钥将汉字符号串转换为数字串,以后的程序完全一样。
