the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


使用DES实现真实数据加密的前奏(分析)

作者:the5fire | 标签:       | 发布:2010-11-23 4:52 p.m. | 阅读量: 7702, 7565
上篇文章里面用java实现了DES的核心算法,并且对外提供了一个比较简单的接口,可以直接使用,不过有一个问题就是这个算法只是核心,只能实现对64位二进制进行加密。所以要在实际状况下使用的话需要进行预处理才行。

所谓预处理就是把真是的数据,比如字符串,数据,等不定长的内容转换成分组的每组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程序员杂谈


其他分类: