【发布时间】:2017-10-17 03:01:49
【问题描述】:
现在我知道 java 没有无符号字节,但如果没有,我不确定如何解决这个问题。 我正在尝试在 java 中实现 SHA256 散列,并且我正在处理将消息转换为 512 位。
int l = bytes.length; //total amount of bytes in the original message
int k = 0;
while((l+1+k) % 512 != 448) {
k++;
}
//k is the total amount of 0's to be padded
int rest = k % 8; //get the amount of 0's to be added in the byte with the 1
byte tmp =(byte) Math.pow(2, rest);
所以关键指令是最后一行,如果 rest = 7 结果 int 是 128,但是字节在 java 中是有符号的,所以字节变成 0x80 而不是 0xF0。 如何在 Java 中实现这一点?
如果有人知道如何实现这部分,请告诉我。
【问题讨论】:
-
为什么 128 会是
0xF0? -
RIght,
rest应该是一个从 0 到 7 的数字,它们都已经是正数并且适合byte的范围。我认为您可能还有其他问题。 -
仅作记录:这是为了学习目的?您知道在现实世界中实现自己的密码学最有可能是一个非常糟糕的主意吗?
-
顺便说一句,你最好使用
1<<rest而不是Math.pow(2, rest) -
“Java 没有无符号字节”并没有直接错误,但它通常没有抓住重点。有符号字节仍然有 8 位,您可以(小心地)将它们视为无符号字节。
(byte)128仍然是正确的结果,即使它在调试器中看起来像 -128。无论哪种方式都是 0x80。
标签: java int byte unsigned sha256