【发布时间】:2011-08-05 16:37:25
【问题描述】:
我是一名尝试实现 DES 算法的学生。 我有两种语言可供选择:C 和 Java。 我确实了解该算法,但在操作密钥方面一开始就卡住了。
这就是问题所在。
在 DES 中,我们有一个 64 位密钥(C 中为 8 个字符,Java 中为 4 个,尽管我可以将字符转换为字节以仅获取 ASCII 部分),其中每个第 8 位都是奇偶校验位,需要被剥离使其成为 56 位密钥并进行进一步处理。我已经考虑了很长时间,但找不到一种方法来剥离每 8 位并将结果存储在另一个 char 数组中(在 Java 和 C 中)。
我尝试使用java.util.BitSet class,但感到困惑。
关于如何删除每 8 位并连接相邻字节(Java)或字符(C)以获得 56 位密钥的任何建议?
我知道位操作和移位,但对于具体示例:
假设我有一个 16 位密钥:1100 1001 1101 1000。
我需要删除第 8 位和第 16 位,生成密钥:1100 100 1101 100。
如果我声明 2 个字节,我如何截断第 8 位并将第 9 位附加到它,使第一个字节:1100 1001
那么,我需要帮助的是如何将第 8 位替换为第 9 位,将第 16 位替换为第 17 位等等以从 64 位密钥导出 56 位密钥?
如果有人可以向我解释它,我也许可以不分语言地实现它。
【问题讨论】:
-
不清楚你所说的“and I 4 in Java”是什么意思。
标签: java c bit-manipulation bit des