[英]Determinisric AES-CTR in Java BouncyCastle?
我一直在 Node 中使用aes-js使用 AES 計數器模式進行加密/解密。
正如您在示例中看到的那樣,我使用它時沒有填充,我可以指定要從哪個塊(在本例中為 0)開始。
var aesCTR = new aesjs.ModeOfOperation.ctr(keyBytes, new aesjs.Counter(0));
var encryptedBytes = aesCTR.encrypt(plaintextBytes);
我想在 Java 中重現上述相同的行為。 我正在使用BouncyCastle,如下例所示。
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted=cipher.doFinal(msgBytes);
但是這個實現似乎沒有輸出與上面相同的值。 另外,它似乎每次運行都會自動增加計數器(在這種情況下是不受歡迎的行為)。
有沒有辦法使用 Java 匹配 Node JS 實現?
如果您提供全為零的 IV / 初始 ctr 值,您應該得到相同的行為,例如:
byte[] iv = new byte[16];
Arrays.fill(iv, (byte)0);
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encrypted=cipher.doFinal(msgBytes);
它在您的代碼中的設置方式,每次調用init()
時都會生成一個隨機 IV。
順便說一句,如果您省略BC
,您將獲得股票 AES 實現
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.