$$ 05 $$
为了安全性,钥匙先暂定用百亿以上的数字吧。百亿,刚好十位数,还是比较凑整的。
那么,这十位数应该怎么生成呢?这难不倒牛郎,只要用一些只有自己和织女知道的信息,来拼凑每一位就可以了。
当然,现在的加密方法并不是非常明晰,因此,牛郎还不想浪费一把“钥匙”。
为了前期测试方便,牛郎还是先用了“见面日期”,年月日一共8位,后面两位用0补齐吧,作为一把临时用的“测试钥匙”。
·
现在有了钥匙,到了创造“锁”的步骤了。
之前的“加一加密法”,可能就有些不太适用了,但是也不至于完全废弃,新的加密方法,也与之异曲同工。
具体怎么做呢?
一篇文章,确实有点过长了,如此操作起来,复杂程度很高,出错的概率也大。
于是,牛郎首先想对文章进行分组。
·
按段落来分组可以吗?这样最自然,但是,并不适合加密。牛郎想到的是按字数分组。
不管当前的句子含义,只要到了100个字,那么,就划一道线,分出来一个小组。
如此依赖,可以保证每个组,都有100个字,当然,包括标点符号的。
·
不过,最后一个小组,一般来说,是不会正好100个字的。这就需要数据补齐。
全部用0填充可以么?也可以,但是这样,可能会比较容易破解,很可能导致“钥匙”被反推出来。
那么,就用随机填充吧。
当然,这里为了避免阅读误解,牛郎约定,随机填充部分以井号开头,并且都用标点符号与特殊字符,避免被误认为是正文。
·
----
$$ 06 $$
分组、填充,这两步完成了,那接下来,就是重头戏了:加密。
分别对每个组进行加密,每个分组构成一个段落,最后拼接起来,就是最终的结果。
·
首先,牛郎取出来第一个分组,进行加密处理。
牛郎先将每个字转换为它在字典中的索引值,这样,文字就全部变成数字了。
先从简单的来,将10位的钥匙,重复10次,刚好就是100位了,写在每个索引值的下方。
然后,两者加起来,得到一个新的索引值。这里大家不要忘了,索引是26进制的,可千万不要搞混了。
·
第一次加密过程结束,但这样,加密其实还是不够稳妥的。
对于每个分组,可能要进行十几次的加密,才能保证其安全性,同时也保证钥匙不能被反向推断出来。
第二次加密要怎么做呢?必然不能跟第一次一样,如果一样的话,只是相当于换了个钥匙而已,并没有增加安全性。
·
因此,需要变换一点花样。变换花样,还不容易么?先写下这十位钥匙,然后再逆序写下来,凑成20位。
接着,把这20位重复5次,又是100位,再求和……
类似的方式变换了几次后,牛郎为了提高安全性,又想出来一个新方法:
100个字,其实可以划分为10行10列,如此就成了一个方阵。
用方阵与钥匙进行运算,应该会更有趣吧?得到的结果应该也会更乱吧?
如此一来,加法就显得没意思了,该乘法出马了。
·
----
$$ 07 $$
是不是有点疑惑了?一个方阵,乘法要怎么计算呢?
而且,需要说的是,不仅是要能计算乘法,还需要该方法可逆,在解密时能够被逆向运算出来。
当然,也没那么复杂了。
方阵是10行10列,而我们的秘钥,是一个10位的数字,可以认为是10列。
·
这样就可以有一个简单的算法了:
方阵的第一行,每个数字乘以钥匙的第一列的数字,得到的数字组成新方阵的第一行。
方阵的第二行则乘以钥匙第二列的数字,以此类推……
不过,有个特别需要注意的点,那就是,0不可以做除数的。
乘法的逆运算是除法,也就是说,钥匙中某一位如果是0的话,那么,没法通过触发逆运算回来。
·
处理的方案,也很简单,数一下钥匙中有几个0,然后把0替换为这个数字,就可以了。
当然,乘法产生的结果会很大,很容易就会超出字典的索引范围。这怎么办呢?
不好意思,这可就没得办了……
牛郎也想过循环索引,比如字典只有10个数字的话,那么索引12就相当于2。
但这样会造成逆运算非常麻烦,因为没法知道哪个文字是循环了一圈之后的。
·
但是直接用索引的话,这个传递起来也不方便呀。
牛郎一想,反正加密后的内容本来就是一堆胡乱的文字了,再乱一点也无妨了。
那么,循环了几次,就在文字前面写上个对应的数字吧。
比如一个索引很大,循环字典两遍后,得到“个”字,那么就协作“2个”。
如此一来,一段100字的分组,原来加密后还是100个字,只是有些字前面多了个数字而已。
·
----
$$ 08 $$
这最后一步,拼接,倒是没有什么技术含量,把之前的分组一个个罗列出来,每个作为信件的一段就好了。
如此,一套加密过程完全结束。
而解密过程,只要有钥匙,按照加密流程反向计算,就能得到原来的内容了。
牛郎把整个加密过程详细描述了出来,然后,又挑出其中一部分文字,按上面的方法进行加密,将密文附在信件末尾。
“有了这封信,织女应该能轻松理解这个加密方法了吧?”牛郎自言自语。
·
这个方法,牛郎自以为还是很高端的,是不是应该称为“高级加密算法”?
不,“算法”这个词,还是有点简陋的,这么厉害的东西,应该可以称之为“标准”了。
那就叫做“高级加密标准”吧,简称的话,牛郎随便选取了几个字母,那就简称AES了。
·
AES加密方法,通过“分组-填充-加密-拼接”的方式,将原文通过钥匙加密为密文,从而保证信息安全性。
当然,这里,既然是“加密方法的钥匙”,不如直接简称为“秘钥”吧。
·
牛郎将信件发给织女,同时也提出了关于十位数字“秘钥”的构建策略。
织女冰雪聪明,很快明白了AES加密方法,但她却先否定了牛郎的“秘钥”策略。
“你和我所共同知晓,且绝对隐秘的信息,是有限的。现在加密方法不稳定,贸然动用这些信息是极大的浪费,很容易被王母破解。”
“或许,我们前期,应该先搞一个‘秘钥交换’的方法。”

