更新:我最終設法重新創建了第三方服務所需的整個Java代碼。我必須補充說一些使用的庫已經被棄用了,但我什麼也做不了,因爲這是對方正在使用的,我必須遵守。從JAVA到node.js的加密和編碼(AES,UTF-8和base64)代碼轉換給出了不同的結果
Java代碼的
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(),
"AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(1, secretKeySpec);
byte[] aBytes = cipher.doFinal(inputString.getBytes());
輸入關鍵字:xxxxxxxxyyyyyyyy
輸入文本:maryhadalittlelamb
周輸出: Z22GETg3Anl92%2BoyqdVWs9haQveaZxkDn8sQYP08iCY%3D
的node.js代碼
var cipher = crypto.createCipher('aes-128-ecb', key);
var encryptedPassword = cipher.update(text, 'utf8', 'base64');
encryptedPassword += cipher.final('base64');
console.log(encryptedPassword);
輸入鍵:xxxxxxxxyyyyyyyy
輸入文本:maryhadalittlelamb
輸出:mnqrpA2eqAhmseTrkBtH3YSGMoFs + ECPUamVd8/bgAQ =
輸出爲相同inputstring兩者的關鍵是不同的。事實上,node.js是不同的,但base64一個看起來相同。
我對這些東西相當陌生,因此我失去了我的願望。
您需要準確找出SecretKeySpec輸出的內容。如果您給每個核心使用相同的密鑰字節並選擇相同的密鑰大小和模式,則它們應該是兼容的。撇開:ecb是一個弱方式,儘可能使用更好的東西。 – dandavis
@dandavis java代碼屬於第三方服務,不受我控制,因此我必須按照他們想要的方式發送數據。我需要在/ SecretKeySpec中檢查/如何操作? –
我猜它是KDF,你需要能夠在節點中重現輸入>輸出,以便在兩種環境中使用相同的實際密鑰。 – dandavis