【问题标题】:CMAC-AES (RFC 4493) calculation in JavaJava 中的 CMAC-AES (RFC 4493) 计算
【发布时间】:2020-03-13 12:01:48
【问题描述】:

我有密钥和数据:

现在如何根据这些参数计算 CMAC?

更多信息:

根据 NIST 特别出版物 800-38B 中描述的 CMAC 标准,使用 AES 作为基础分组密码计算 MAC。但我很难在 java 中找到合适的 MAC 计算示例。

编辑 this 链接非常适合这个。我需要这方面的 Java 示例。

【问题讨论】:

  • 除了 800-36B 中定义的 MAC 之外,还有几种基于 AES 的 MAC。 CMAC 没有被定义为接受 IV 的 MAC,所以我很好奇是什么让您相信您正在使用的密钥和数据是用于 CMAC,而不是 CbcMac、GMAC、AES-CCM 等。无论哪种方式,都应该存在可以处理任何这些情况的 java 库。
  • 我很遗憾没有 IV。我已经编辑了我的代码。
  • 我一直在努力寻找一个好的 java 例子但没有运气:(
  • 你试过充气城堡吗?它肯定有一个 CMAC 实现......否则:你从十六进制转换为二进制,然后用密钥初始化 CMAC,然后执行计算,可能会将结果恢复为十六进制。你不需要这样的例子,是吗?否则应该有可用的测试类。
  • 我用 iv 尝试过的方法编辑了问题。我去看看充气城堡

标签: java android cryptography aes


【解决方案1】:

如果有人在这里寻找 CMAC AES 计算,它正在使用 Bouncy Castle:

 public void getCMAC()
            throws Exception {
        byte[] msg = new byte[]{(byte) 0xA3, (byte) 0x00, (byte) 0x00, (byte) 0x35, (byte) 0xE7, (byte) 0x58,
                (byte) 0xC6, (byte) 0x09, (byte) 0x00, (byte) 0x4F, (byte) 0x44, (byte) 0x36, (byte) 0xF0,
                (byte) 0xEA, (byte) 0x31, (byte) 0x9A, (byte) 0xF4, (byte) 0x31, (byte) 0xE1,
                (byte) 0x98, (byte) 0xBC, (byte) 0x41, (byte) 0xA0, (byte) 0x67, (byte) 0xD1};

        byte[] keydata = new byte[]{(byte) 0x67, (byte) 0x1B, (byte) 0x9D, (byte) 0x1D, (byte) 0xC1, (byte) 0x54,
                (byte) 0x74, (byte) 0xA2, (byte) 0x5C, (byte) 0xB1, (byte) 0x77, (byte) 0xCA, (byte) 0x1A,
                (byte) 0x19, (byte) 0x9F, (byte) 0x0E};

        CipherParameters params = new KeyParameter(keydata);
        BlockCipher aes = new AESEngine();
        CMac mac = new CMac(aes);
        mac.init(params);
        mac.update(msg, 0, msg.length);
        byte[] out = new byte[mac.getMacSize()];
        mac.doFinal(out, 0);

        StringBuilder s19 = new StringBuilder();
        for (byte b : out) {
            s19.append(String.format("%02X ", b));
        }
        Log.e("ecrypted Kmac :", s19.toString());
    }

确保你像这样添加库:

 implementation 'org.bouncycastle:bcpkix-jdk15on:1.56'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多