CryptoJS を使用して暗号化された Java のテキストを復号化しようとしています。他の投稿で、異なるデフォルトモードとパディングを使用していることを読んだので、両方(java/cryptojs)を両方ともaes/cbc/nopaddingを使用するように設定しました。Java で例外が発生しなくなりましたが、復号化中に文字化けした出力が得られます
暗号化 (JS):
var parsedLogin = JSON.parse(login);
var publicKey = "abcdefghijklmnio";
var publiciv = "abcdefghijklmnio";
var key = CryptoJS.enc.Hex.parse(publicKey);
var iv = CryptoJS.enc.Hex.parse(publiciv);
var encrypted = CryptoJS.AES.encrypt(parsedLogin.password, publicKey, {iv: publiciv}, { padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.CBC});
// send encrypted to POST request
復号化 (Java)
String PUBLIC_KEY = "abcdefghijklmnio";
String PUBLIC_IV = "abcdefghijklmnio";
byte[] byteArr = PUBLIC_KEY.getBytes();
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
final SecretKeySpec secretKey = new SecretKeySpec(byteArr, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(PUBLIC_IV.getBytes()));
byte[] parsed = Base64.decodeBase64(encrypted.getBytes());
//byte[] parsed = DatatypeConverter.parseBase64Binary(encrypted);
byte[] fin = cipher.doFinal(parsed);
String decryptedString = new String(fin);
私が得ている結果は次のようなものです: вÛ!aå{'`@"Ûîñ?Œr˜krÆ
私はすでに getBytes() の CHARSET を US-ASCII、UTF-8、および UTF-16 に変更しようとしましたが、これは文字化けしたテキストを変更するだけです
他のブロッキング モードとパディングも使用してみましたが、js レベルで失敗しました。今すぐ簡単な暗号化方法が必要です。
注: セキュリティの問題は無視してください...キーが js で公開されているなどです。後で処理します..