4

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

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

2 回答 2

4

谢谢@andrey - 我发现了一个更完整的样本也来自BC 邮件列表

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();
    }
}
于 2013-11-01T10:44:29.683 回答
2

来自 BC邮件列表

似乎我们的疏忽意味着 JCE 提供者目前没有公开设置 AAD 的机制(也适用于其他 AEAD 密码:CCM、EAX)。

在轻量级 API 中,AAD 通过(字段“关联文本”) .init的实例传递给密码 ( )。AEADParameters

使用轻量级 API,您还可以通过AEADBlockCipher接口processAADBytes()公开的方法提供 AAD 数据。

于 2013-10-22T16:12:56.230 回答