使用JDK 1.8进行AES-GCM加密

时间:2018-04-04 19:18:22

标签: java-8 aes-gcm javax.crypto

计划添加以下Enc Algo的支持:

通过基于JDK 1.8的实施,参考javax.crypto.spec.GCMParameterSpec& javax.crypto.Cipher。在这里,我知道Cipher需要GCMParameterSpec对象:

public final void init(int opmode, Key key, AlgorithmParameterSpec params)

现在想知道上面列出的所有Algo的( IV& tLen )的值是什么,以创建GCMParameterSpec对象。

对于上面列出的不同算法,这些值是否会有所不同(不,在我看来只是变化是关键尺寸)

请详细说明GCMParameterSpec的这两个属性(IV& tLen)的用途

1 个答案:

答案 0 :(得分:2)

来源here

  

出于本规范的目的,AES-GCM应与96位初始化向量(IV)和128位认证标签(T)一起使用。

需要使用IV或nonce(number-used-once)来确保相同的消息不会加密到相同的值。对于使用下方点击率模式的GCM模式,至关重要永远不会重复

如果你继续阅读,你会发现:

  

对于本规范使用的伽罗瓦/计数器模式(GCM),IV不能重复用于任何键,应该是随机的,但它不一定是秘密的。

对于Java,这意味着从SecureRandom实例中检索12个随机字节;只需使用new SecureRandom()获取即可。

验证标签当然会验证密文,从而验证加密的邮件。这将确保维护消息的真实性和完整性。对于GCM,认证标签的大小很重要;它最好保持最大化。大小为128位,这个规范的确如此。

密钥大小确实与IV和身份验证标记的大小完全分开。

如果不确定,请阅读标准