我使用 Cipher.getInstance("DES") 加密和解密消息,我发现它在 sun jre 和 ibm jre 上得到不同的结果。所以我不能在 AIX 上加密消息然后在 Linux 上解密。我尝试导入 sunjce 并在 ibm jre 环境中使用它并获得与使用 ibmjce 相同的结果,但它与在 sun jre 上不同。有没有办法加密消息在 sun jre 和 ibm jre 上获得相同的结果?下面的代码在 sun jre 和 ibm jre 上运行会得到不同的结果。</p>
public static void test2() throws Exception {
Security.addProvider(new SunJCE());
Security.addProvider(new IBMJCE());
String strKey = "12345678";
KeyGenerator generator = KeyGenerator.getInstance("DES", "SunJCE");
// KeyGenerator generator = KeyGenerator.getInstance("DES", "IBMJCE");
System.out.println("KeyGenerator provider:" + generator.getProvider());
//
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(strKey.getBytes());
generator.init(secureRandom);
Key key = generator.generateKey();
Cipher cipher = Cipher.getInstance("DES", "SunJCE");
// Cipher cipher = Cipher.getInstance("DES", "IBMJCE");
System.out.println("Cipher provider:" + cipher.getProvider());
cipher.init(Cipher.ENCRYPT_MODE, key);
String strTest = "TESTtest123";
byte[] byteTest = strTest.getBytes("UTF-8");
byte[] byteEncry = cipher.doFinal(byteTest);
System.out.println("strTest:" + strTest);
System.out.println("encode:" + new BASE64Encoder().encode(byteEncry));
}
感谢任何想法、建议或解决方法。谢谢。
编辑:我的应用程序部署在 windows、red hat linux 和 aix 上。它们可以相互传递加密消息,接收方将解密消息。在 win 和 linux 上工作正常。但 aix 总是得到一个异常“ javax.crypto.BadPaddingException:Given final block not proper padded"当尝试解密来自其他系统的消息时。同样的事情发生在window或linux尝试解密来自aix的消息时。有没有办法解决这个问题?