前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用DES实现真实数据加密的前奏(分析)

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

作者头像
the5fire
发布2019-02-28 10:21:50
4590
发布2019-02-28 10:21:50
举报

上篇文章里面用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实现了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-11-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档