我加密了一些文本,如下所示:
Cipher in = Cipher.getInstance("AES/CCM/NoPadding", "BC");
in.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(_nonce));
encoded = in.doFinal(payload);效果很好。我想获得MAC,所以我尝试这样做:
byte[] K = Hex.decode(bek.getBytes());
Key key = new SecretKeySpec(K, "AES");
Mac mac = Mac.getInstance("AES/CCM/NoPadding", "BC");但是得到一个“没有这样的算法:AES/CCM/”。
那么,使用什么算法从AES/CCM加密消息中提取MAC?谢谢!
发布于 2011-01-19 05:18:08
CCM模式意味着使用AES的CBC块密码MAC,所以这是你应该使用的算法,但我自己没有写过使用它的代码。我知道BouncyCastle使用CBCBlockCipherMac类实现了这一点,但我不能100%确定正确的算法名称,但查看源代码,它似乎是"AESMac“(默认情况下使用CBC模式和补零)。
发布于 2016-07-11 11:42:15
是的,密码文本中存在身份验证标签(Mac)。如果在处理过程中使用了n位的mac,那么密码文本中的最后n位就是mac。
你也可以通过代码找到它
CCMBlockCipher cipher = new CCMBlockCipher(engine);
cipher.init(true, params);
byte[] outputText = new byte[cipher.getOutputSize(inputData.length)];
int outputLen = cipher.processBytes(inputData, 0, inputData.length,
inputData, 0);
cipher.doFinal(outputText, outputLen);
//this is your mac
cipher.getMac();发布于 2011-01-20 12:12:34
您不能使用JCE来提取MAC,它根本不受支持。您必须直接使用Bouncycastle加密API。类CCMBlockCipher有一个getMac方法来检索Mac字节。
https://stackoverflow.com/questions/4728472
复制相似问题