我是一名试图实现 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 位密钥?
如果有人可以向我解释,我可能能够实现它,而不管语言如何。