2015-06-20 54 views
-1

我已经写了一段代码,我无法解释为什么它不应该如此行事。我知道这听起来很愚蠢,但事实并非如此。要'如果'或不''如果'

  boolean verify = EDV.verifySignature(signature, cipherText, 
        SERVER_PUBLIC_KEY); 
      out.println("Validity " + verify); 
      if (verify) { 
       // //message is authentic 
       String decryptedMessage = EDV.decrypt(cipherText, 
         SERVER_PRIVATE_KEY); 
       out.println("Message : " + decryptedMessage); 
      }else 
      { 
       out.println("Signature did not match"); 
      } 

这是一个简单的代码,用于验证签名,然后对信息进行解密,如果该签名是有效的(验证是真实的)

此代码的输出是这样的:

Validity false 
Signature did not match 

的消息解密就好了。

问题是签名应该验证(我检查了签名,cipherText和密钥n次)。这是踢球。

几乎相同的代码

   boolean verify = EDV.verifySignature(signature, cipherText, 
         SERVER_PUBLIC_KEY); 
       out.println("Validity " + verify); 
//    if (verify) { 
        // //message is authentic 
        String decryptedMessage = EDV.decrypt(cipherText, 
          SERVER_PRIVATE_KEY); 
        out.println("Message : " + decryptedMessage); 
//    }else 
//    { 
//     out.println("Signature did not match"); 
//    } 

,瞧!输出是因为我想它是和理所应当的。

Validity true 
Message : This is a sample Text 

而且,第一个代码工作在Eclipse上得很好,但运行它的Java servlet是唯一一次我得到这个。 另外,我第一次运行代码#2它给出了假,但之后它给出了真实。

我似乎无法解释原因。

LINKS

Code#1

Code#2(运行这段代码,它提供虚假有效性刷新它,它变成真)

+1

它在两个链接上立即给出正确的结果。 –

+0

这两个代码之间的区别究竟是什么?他们看起来一样。 –

+0

@LorenzMeyer矿不。这怎么可能。只有代码#2在多次刷新的情况下也是如此。不同之处在于我评论了if语句。 – crackerjack

回答

1

有什么地方不正确的代码只是你给样品前初始化。尝试为签名,cipherText和SERVER_PUBLIC_KEY参数添加一些测试println语句。

此外,请检查EDV.verifySignature的初始化。

+0

所有的变量都被很好地赋值,如果它们不是这样的话,代码将不会在第一时间起作用。我检查每个变量的条件。 – crackerjack