gpt4 book ai didi

android - 在 Android 上向 AES-GCM 添加额外的经过身份验证的数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:51 26 4
gpt4 key购买 nike

我正在尝试将额外的身份验证数据 (AAD) 添加到 Android 上的 AES-GCM。我看到 Cipher notes 的 Java 7 版本关于使用 GCMParameterSpecupdateAAD(...) 方法,但鉴于 Android 是基于 Java 6 的,我完全没有想法。我使用 SpongycaSTLe 作为加密库

  GCMParameterSpec s = new GCMParameterSpec(...);
cipher.init(..., s);
cipher.updateAAD(...); // AAD

最佳答案

谢谢@andrey - 我在 BC mailing list 中找到了一个更完整的示例

public void testGCM() {
try {
byte iv[] = "123456789012".getBytes();
byte inMsg[] = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
.getBytes();
byte aad[] = "123456789012123456789012123456789012345678901234567890123456"
.getBytes();
byte key[] = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb".getBytes();

System.out.println("inMsgLen===" + inMsg.length);

// encrypt
AEADParameters parameters = new AEADParameters(
new KeyParameter(key), 128, iv, aad);
GCMBlockCipher gcmEngine = new GCMBlockCipher(new AESFastEngine());
gcmEngine.init(true, parameters);

byte[] encMsg = new byte[gcmEngine.getOutputSize(inMsg.length)];
int encLen = gcmEngine.processBytes(inMsg, 0, inMsg.length, encMsg,
0);
encLen += gcmEngine.doFinal(encMsg, encLen);

System.out.println("encLen===" + encLen);

// decrypt
gcmEngine.init(false, parameters);

byte[] decMsg = new byte[gcmEngine.getOutputSize(encMsg.length)];
int decLen = gcmEngine.processBytes(encMsg, 0, encMsg.length,
decMsg, 0);
decLen += gcmEngine.doFinal(decMsg, decLen);

System.out.println("decLen===" + decLen);

System.out.println("MSG===" + new String(decMsg));
} catch (Exception e) {
e.printStackTrace();
}
}

关于android - 在 Android 上向 AES-GCM 添加额外的经过身份验证的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19519138/

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