【发布时间】:2017-08-07 18:58:32
【问题描述】:
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 位块密码):
- 128 位随机数与 m 位计数器值(通常为 32 位)进行异或。
- 64 位随机数附加到 64 位计数器。
我的问题是:
- 关于使用的初始计数器块的确切过程是什么 在 javax.crypto.Cipher 的“AES/CTR/NoPadding”实例中(假设 SunJCE 作为提供者)? 也就是说,给定上面的代码,如果有的话,使用了之前的初始计数器块的哪种方法?
【问题讨论】:
-
@MaartenBodewes
-
这并不适用于任何地方,只适用于我发表评论的地方,但是嘿,没问题,Artjom 处理了这个问题:)
标签: java encryption aes nonce ctr-mode