java - Java 或 C 中字符的位操作?

标签 java c bit-manipulation bit des

我是一名尝试实现 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/

相关文章:

java - 为按位运算声明掩码

java - Libgdx Table ExpandX() 展开所有行

java - Okhttp3 - 调用 API 后出现 IndexOutOfBoundsException

java - 可运行的 jar 文件找不到 log4j.xml

c - 使用 C 套接字程序遇到障碍

c - fread() 无法正确写入字符串

c - 用按位运算符替换 “!=”

java - 如何在 JavaFx 中创建通用 TableView?

c++ - 如何确定 POINT 是否在按钮区域内

java - Java算子的疑惑