我正在尝试用java编写MD5哈希算法,但我目前陷入了模加法的部分,因为我需要将许多值放在一起。问题是,在一次计算中,两个正整数给我一个负值。 这部分的计算公式如下(如果我没理解错的话):
X = A set value (Here 01234567)
Y = 4275878552
Kx = abs(sin(x + 1)) + 2^32 -> K1 = 2147483647
Calc1 = (x + y) % 100000000 -> 58746041
Calc2 = (SetValue + calc1) % 100000000 -> 37294613
Calc3 = (K1 + calc2) % 100000000 -> ?
(格式有点奇怪,所以中间有空行)
但是 K1 + calc2 给我 -2110189036,尽管两个值都是正数,但它会导致负值 -2110189036
这是我的代码:
String x = abcd[0];
String y = fghi[0];
String output1 = String.valueOf((hexToInt(x) + hexToInt(y)) % 100000000);
String output2 = String.valueOf(
(bitToInt(String.valueOf(roundsM[0])) + Integer.parseInt(output1, 10)) % 100000000);
String output3 = String.valueOf((k(1) + Integer.parseInt(output2, 10)) % 100000000);
我知道我将它们存储为字符串,然后将它们转换,但是转换方法
hexToInt
和 bitToInt
工作得很好,我这样做是因为我不确定数字有多大,以后可能需要它们作为字符串
我感谢任何帮助
我已经通过将其转换为长整数解决了这个问题。现在可以了。感谢您的帮助