簡體   English   中英

Java BouncyCastle中的確定性AES-CTR?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM