SHA-256项目中的NumberFormatException

时间:2018-01-02 02:39:14

标签: encryption hash sha

我正在开展一个研究项目,其中包括开发和实现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

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

1 个答案:

答案 0 :(得分:0)

二进制值&#34; 11100010111000101100001110001110&#34;这是32位长,对于签名整数来说太大了,因为符号使用了一位。

为了能够处理所有32位,您可以改为使用restricted_package_name