我試圖解密使用CryptoJS加密的java中的文本。我讀過其他職位,他們使用不同的默認模式和填充,所以我將它們都設置(java/cryptojs)都使用aes/cbc/nopadding。我不再獲得Java中的異常,但是解密過程中我得到一個亂碼輸出AES/CBC/NoPadding解密中的亂碼輸出
加密(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
DECRYPT(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);
我」結果我已經嘗試將getBytes()中的CHARSET更改爲US-ASCII,UTF-8和UTF-16,但所有這些確實是改變了亂碼文本
我也嘗試使用其他阻塞模式和填充,但他們在js級失敗。我現在只需要一個簡單的加密方法。
注: 忽略安全問題......就像在JS暴露的鑰匙,等我會處理那些後來..
'VAR鍵= CryptoJS.enc.Hex.parse(公鑰)從串的WordArray;'OK,但我相信,你的'publicKey'(應該不就是'secretKey' ?)實際上是32個十六進制字符/ 16個字節。否則,代碼沒有意義。 –
對不起,我忘了刪除該行(key = CryptoKs.enc.Hex ...)。這是我以前試過的解決方案之一。 – gogogadgetroy