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: 他のシステムからのメッセージを復号化しようとすると、「最終ブロックが適切に埋め込まれていない」というメッセージが表示されます。ウィンドウまたは Linux が aix からのメッセージを復号化しようとすると、同じことが起こりました。この問題を解決する方法はありますか?