SHA-256项目中的NumberFormatException

问题描述 投票:0回答:1

我正在研究一个研究项目,其中包括开发和实现SHA-256哈希算法的代码。我在我的测试程序中得到一个NumberFormatException,如下所示:

    Exception in thread "main" java.lang.NumberFormatException: For input string: "11100010111000101100001110001110"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at SHA2.processHash(SHA2.java:70)
    at SHA2.<init>(SHA2.java:30)
    at SHATest.main(SHATest.java:4)

这些是我的SHA2类中的第60-75行:

   public void processHash(String[] blocks, String[] W)
   {
     for(int i=0; i<16; i++)
     {
       W[i]=blocks[i];
     }
    for(int i=16; i<64; i++)
    {
      int binaryW = Integer.parseInt(W[i-15], 2);
      int s0 = delta0(binaryW);
      binaryW = Integer.parseInt(W[i-2], 2);
      int s1 = delta1(binaryW);
      int sum = s0 + (Integer.parseInt(W[i-16], 2)) + s1 + 
      (Integer.parseInt(W[i-7], 2));
      W[i] = Integer.toBinaryString(sum);
      }
  }

不确定这里到底发生了什么。我认为我的值超过2 ^ 31-1所以我使用了一个长而不是更大但仍然得到相同的错误。

这是我整个SHA-2类的代码:GitHub Project

我对编码有些新意,所以我确信我已经对大部分代码进行了屠杀。

encryption hash sha
1个回答
0
投票

32位长的二进制值“11100010111000101100001110001110”对于带符号的整数而言太大,因为符号使用一位。

为了能够处理所有32位,您可以使用long binaryW = Long.parseLong(W[i-15], 2);代替。

© www.soinside.com 2019 - 2024. All rights reserved.