所谓预处理就是把真是的数据,比如字符串,数据,等不定长的内容转换成分组的每组64位二进制数据组。然后再进行分组加密,最后结果合并得到加密数据,当然了,为了不让别人看出来最后的二进制密文,你可以把这些分组的数据再转换成字符串或者什么格式的就行了。
预处理过程:
1. 转换成每组8位的byte数组
首先将字符串进行转换,转换成byte数组,并且数组长度要是8的整数倍,因为要按照8位来分组。不够8位的要补齐8位。并且填充位赋值为它所缺少的位数。
2. 把8位的byte数组转换成为64位的二进制数组
先要保证byte数组中的每个byte位都要大于0,这样在进行二进制转换的时候才不会出问题。如果小于0需要进行变换,因为每个byte是8bit,在转换成的时候不需要考虑符号位,因此如果小于0需要对其加256(即2的8次幂),这样转换成二进制。至于怎么转换成二进制你可以参考上篇文章里面的源代码,这里贴出来一点:
//把生成的8个数字转成二进制存到sValue中
for (int j = 0; j < 4; j++) {
sValue[((i * 4) + 3) - j] = sBoxData[i] % 2;
sBoxData[i] = sBoxData[i] / 2;
}
3. 在进行解密的时候要把填充位去掉
在上面步骤中为了满足八位的需求对不够八位的进行了补齐操作,因此在解密时需要把填充位去掉。那么去掉多少填充位呢?根据扩充时对填充位的赋值可以得到填充了多少位。(这里我计算了半天,发现其实很简单,因为你填充位进行加密之后再解密数据还是一样的。)这样就得到了解密后的序列,然后转换成字符串或者是其他需要的格式就ok了。
这样基础部分就分析完了,剩下工作就是用java实现了。
- from the5fire.com
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈