![](/img/trans.png)
[英]Encrypt payload using a key and iv by AES/GCM/NoPadding algorithm in node js and decrypt in java
[英]AES cypher in GCM mode with null byte IV in java
我必須在 GCM 模式下使用帶有空字節 IV 的 AES 密碼來加密 json 有效負載。
當我嘗試使用密鑰和 json 有效負載時,我得到的結果與預期不同。 它僅與 AES GCM MAC 部分不匹配。
這些是參數和我的源代碼:
GCM_TAG_LENGTH= 16,
十六進制對稱鍵:083080D3D0C521C02CD3AE2134363D09EA50DFF914677FAB9E22F18F9C28A3B9
jsonPayload:{"Parameter1":"Value1","Parameter2":"Value2","Parameter3":"Value3"}
輸出(預期):EF6BA2FFA05B69855FE129E3CB6845C4EA1E94AE98D31A538A4A24906FB720D764D640894CD9 DE7CEC001143960CD9 DE7CEC001143960S24906FB720CD9 DE7CEC001143960CS24906FB720CD9 DE7CEC0011439665593039393655CCSEDCF480C57A1CHEDCF480CF57A959CF85557A959CF855FC711FAB3CBY10DC2BA9A2B B063CEFF8DE1
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
SecretKeySpec keySpec = new SecretKeySpec(secretkey, "AES");
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(Integer.valueOf(WalletStaticTypes.GCM_TAG_LENGTH.getType()) * 8,newbyte[12]);
cipher.init(Cipher.ENCRYPT_MODE, keySpec,gcmParameterSpec);
byte[] encryptedPayLoad = cipher.doFinal(jsonPayload.getBytes("UTF-8"));
Hex.encodeHexString(encryptedPayLoad,false);
我注意到這是關於 Apple Pay 集成的,我設法從測試文檔中使用
GCMParameterSpec(128, ByteArray(12))
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
cipher.init(Cipher.ENCRYPT_MODE, finalKey, GCMParameterSpec(128, ByteArray(12)))
// AES Key
083080D3D0C521C02CD3AE2134363D09EA50DFF914677FAB9E22F18F9C28A3B9
// JSON Payload (67 bytes), UTF-8 encoded: {"Parameter1":"Value1","Parameter2":"Value2","Parameter3":"Value3"}
Output:
E3EF6BA2FFA05B6985FE129E3CB6845C4EA1E94AE98D31A538A4E24906FB720D764D640894CD9DE7CEC00114396651A1CCAEDCF480C57A959E925C04492B9CF85FC711FAB3CBED10DC2BA99A2BB063CEFF8DE1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.