gpt4 book ai didi

java - 加密数据随机存取 AES GCM模式

转载 作者:行者123 更新时间:2023-11-30 07:54:16 27 4
gpt4 key购买 nike

随机访问 AES CTR 模式有一个很好的例子,它可以工作: Random access InputStream using AES CTR mode in android

private static final int AES_BLOCK_SIZE = 16;
private static IvParameterSpec calculateIVForOffset(final IvParameterSpec iv,
final long blockOffset) {
final BigInteger ivBI = new BigInteger(1, iv.getIV());
final BigInteger ivForOffsetBI = ivBI.add(BigInteger.valueOf(blockOffset
/ AES_BLOCK_SIZE));

final byte[] ivForOffsetBA = ivForOffsetBI.toByteArray();
final IvParameterSpec ivForOffset;
if (ivForOffsetBA.length >= AES_BLOCK_SIZE) {
ivForOffset = new IvParameterSpec(ivForOffsetBA, ivForOffsetBA.length - AES_BLOCK_SIZE,
AES_BLOCK_SIZE);
} else {
final byte[] ivForOffsetBASized = new byte[AES_BLOCK_SIZE];
System.arraycopy(ivForOffsetBA, 0, ivForOffsetBASized, AES_BLOCK_SIZE
- ivForOffsetBA.length, ivForOffsetBA.length);
ivForOffset = new IvParameterSpec(ivForOffsetBASized);
}

return ivForOffset;
}

但是,它不适用于 AES GCM 模式。解密时我得到垃圾。我不是加密专家,已经尝试破解了几天。也许任何人都可以对此有任何见解?我想我需要以某种方式更改偏移量的 IV 计算,或者它与 auth 标签(我没有使用)有关。

最佳答案

GCM 模式使用计数器模式进行保密。所以可以在不认证的情况下解密密文;看看我的回答here .要从给定偏移量加密或解密,您可以更改计数器以更改给定偏移量的字节并对生成的密文进行异或。但是,如果您跳过一个字节,您将无法验证任何密文。

因此,对于 GCM,最好将明文分成 block 并分别加密。请注意,您还应该确保不能更改明文的顺序,例如通过使用 HMAC 或经过身份验证的 Merkle 树对身份验证标签进行身份验证。

关于java - 加密数据随机存取 AES GCM模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44176328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com