计划添加以下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)的用途
答案 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和身份验证标记的大小完全分开。
如果不确定,请阅读标准。