我是一名尝试实现 DES 算法的学生。 我可以选择 2 种语言:C 和 Java。 我确实了解该算法,但对于 key 的操作却一头雾水。
问题来了。
在 DES 中,我们有一个 64 位 key (C 中为 8 个字符,Java 中为 4 个字符,尽管我可以将字符转换为字节以仅获取 ASCII 部分),其中每第 8 位是奇偶校验位,需要被剥离使其成为 56 位 key 并进行进一步处理。我已经考虑了很长时间,但找不到一种方法来剥离每第 8 位并将结果存储在另一个 char 数组中(在 Java 和 C 中)。
我尝试使用 java.util.BitSet 类
,但感到困惑。
关于如何删除每第 8 位并连接相邻字节 (Java) 或字符 (C) 以获得 56 位 key 的任何建议?
我知道位操作和移位,但是对于具体的例子:
假设我有一个 16 位 key :1100 1001 1101 1000
。
我需要删除第 8 位和第 16 位,使 key 成为:1100 100 1101 100
。
如果我声明 2 个字节,我如何截断第 8 位并将第 9 位附加到它,使第一个字节:1100 1001
那么,我需要帮助的是如何将第 8 位替换为第 9 位,将第 16 位替换为第 17 位等等,以从 64 位 key 派生出 56 位 key ?
如果有人能向我解释一下,我也许可以不考虑语言来实现它。
最佳答案
小心 Java 中的 16 位字符。许多方法只转换低 8 位。仔细阅读文档。由于类型比 C 语言更强,因此在 Java 中将加密 key 视为 byte[]
更为常见。
关于奇偶校验位,仔细检查DES算法,看看它们用在什么地方。这应该会提示您需要用它们做什么。
关于java - Java 或 C 中字符的位操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6959660/