Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的CMAC-AES(RFC 4493)计算_Java_Android_Cryptography_Aes - Fatal编程技术网

Java中的CMAC-AES(RFC 4493)计算

Java中的CMAC-AES(RFC 4493)计算,java,android,cryptography,aes,Java,Android,Cryptography,Aes,我有钥匙和数据: 现在我如何根据这些参数计算CMAC 更多信息: 根据NIST特别出版物800-38B中描述的CMAC标准,MAC使用AES作为基础分组密码进行计算。但我很难在java中找到合适的MAC计算示例 编辑 link非常适合这种情况。我需要这方面的Java示例。如果有人在这里寻找CMAC AES计算,它使用的是Bouncy Castle: public void getCMAC() throws Exception { byte[] msg =

我有钥匙和数据:

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

更多信息:

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

编辑
link非常适合这种情况。我需要这方面的Java示例。

如果有人在这里寻找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'

除了800-36B中定义的MAC之外,还有几种基于AES的MAC。CMAC不被定义为接受静脉注射的MAC,所以我很好奇是什么让你相信你使用的密钥和数据是针对CMAC的,而不是CbcMac、GMAC、AES-CCM,等等。无论哪种方式,都应该有可以处理这些情况的java库。我的缺点是没有IV。我已经编辑了我的代码。我一直在试图找到一个好的java示例,但运气不好:(你试过Bouncy Castle吗?它肯定有一个CMAC实现……否则:你从十六进制转换成二进制,然后用键初始化CMAC,然后执行计算,可能会将结果还原回十六进制。你不需要例子,是吗?否则应该有测试类可用。我用wha编辑了这个问题我试过了,我去看看Bouncy Castle