gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:10 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com