【发布时间】:2013-11-18 15:39:45
【问题描述】:
好的,我会保持简单明了。
我正在使用 Java 进行 SHA-256 的粗略实现,为了使类方法有利于应用程序中的其他类,我决定将数据作为 32 位整数数组进行 I/O (整数)。显然,这些类型的使用在很大程度上依赖于位运算符的使用,那么我如何在一个整数数组中完成按位移位跨,如下所示:
给定一个数据数组,假设:
int[16] data;
其中前 14 个整数值的数据用 0x0000000 填充,用于对话,但分别填充最低的两个:
data[14] = 0x12345678;
data[15] = 0x01ABCDEF;
如何实现左移,如果左移两个,
data[13] = 0x00000012;
data[14] = 0x34567801;
data[15] = 0xABCDEF00;
有人有什么想法吗?
【问题讨论】:
-
当你移位时,也在下一个 int 的正确位中进行 OR。例如,
data[15] = (data[15] << 2) | (data[14] >>> 30) -
也许使用 BigInteger 并创建一个 API“以保持类方法有利于应用程序中的其他类”。 BigInteger 有类似
shiftLeft(int n)的方法,见docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html -
@RonE - 是否可以从 int 数组构造
BigInteger实例? Oracle 文献仅提供使用字节数组的示例。 32 位和 8 位特性在构建过程中是否会有所不同? -
@blasthash 如果您以 int[16] 形式接收数据,则编写一个将其转换为 byte[64] 的方法
-
或者像我说的那样转移它们。这并不难。
标签: java int bit-manipulation shift sha256