我创建了以下单例类来加密和解密字符串消息。
public static void main( String[] args ) {
EncryptionHelper encryptionHelper = EncryptionHelper.getInstance( "000000000000ffffffffffff" );
System.out.println( encryptionHelper.encrypt( "ABCDEFGH" ) );
}
当我尝试使用具有不同密钥的两个不同程序时使用此类的加密和解密方法如下。
public static void main( String[] args ) {
// Use different key to decrypt
EncryptionHelper encryptionHelper = EncryptionHelper.getInstance( "111111111111ffffffffffff" );
// Use output of previous call as input to decrypt
System.out.println( encryptionHelper.decrypt( "n+0SEJQDXwfvpdMIdetNow==" ) );
}
输出为::: n + 0SEJQDXwfvpdMIdetNow ==
和
{{1}}
输出是::: ABCDEFGH
正如您所看到的,我在使用加密和解密方法时使用不同的密钥,但程序仍能使用错误的密钥解密确切的值。
你能帮助我知道吗,为什么我这样做,为什么我能用错误的密钥解密?
答案 0 :(得分:0)
为什么我能够使用错误密钥解密?
...因为您没有使用第二个密钥,而是第一次调用getInstance
时使用的密钥
如果您没有看到,请在getInstance
的第二次通话中回答以下问题,当instance
已经有值且不是NULL
时, defKey
如何影响实例? (提示:它没有)