2
import javax.crypto.Cipher;
public abstract class Crypto {
private static final String CIPHER_ALGORITHM = "AES/CTR/NoPadding";
private String AesKeyString = "ByWelFHCgFqivFZrWs89LQ==";
private void setKey() throws NoSuchAlgorithmException{
byte[] keyBytes;
keyBytes = Base64.getDecoder().decode(AesKeyString);
aesKey = new SecretKeySpec(keyBytes, "AES");
}
protected byte[] execute(int mode, byte[] target, byte[] iv)
throws Exception{
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(mode, aesKey, ivSpec);
return cipher.doFinal(target);
}
}
根據NIST Recommendation - 附錄B,有構建初始計數器塊(AES是128比特塊密碼)兩種有效的方法:如何處理AES CTR的IV/Nonce/Counter?
- 128位的隨機數進行異或運算與米位計數器值(通常是32位)。
- 將64位隨機數添加到64位計數器。
我的問題是:
- 什麼是關於初始計數器塊的確切過程在 「AES/CTR/NoPadding」 javax.crypto.Cipher中的實例(假設了SunJCE所用 提供者)? 也就是說,考慮到上述代碼,使用了初始計數器塊的以前方法中的哪一種,如果有的話?
@MaartenBodewes –
這並不僅在我發佈的評論,但嘿地方工作無處不在,沒問題,[Artjom](http://stackoverflow.com/users/1816580/artjom-b)照顧了:) –