是否可以在Android上禁用AES / CCM中的消息身份验证检查?

时间:2013-12-23 14:59:27

标签: java android encryption aes

我正在处理一些接收AES / CCM加密数据包但没有附加MAC的代码。这导致我在Java中出现问题,因为库期望MAC存在。以下是执行解密的代码片段:

javax.crypto.Cipher out = Cipher.getInstance("AES/CCM/NoPadding", "BC");
out.init(Cipher.DECRYPT_MODE, key, new javax.crypto.spec.IvParameterSpec.IvParameterSpec(nonce));
byte[] decrypted = out.doFinal(encrypted);

执行时,我的输入失败,因为8个字节的MAC未附加到encrypted数组的末尾。错误消息为:Encryption failed : MAC check in CCM failed。有没有办法使用Java库设置解密,以便不期望MAC?不幸的是,我无法控制远程设备发送给我的数据格式。

2 个答案:

答案 0 :(得分:0)

CCM是带有MAC的CBC。如果您不想使用身份验证字段,请使用AES / CBC。

答案 1 :(得分:0)

通过在 async askFeedbackStep(stepContext) { const CHOICES = ['⭐','?']; return await stepContext.prompt(FEEDBACK_PROMPT, { choices: ChoiceFactory.toChoices(CHOICES), style: ListStyle.suggestedAction }); } } 中将 macSize 设置为 0,您可以使用 Bouncy Castle 执行此操作。下面的示例假设 AEADParameterSpec 附加了 MAC。在您的情况下,通过调用 ciphertext 而不是 cipher.doFinal(ciphertext) 来调整它丢失的事实。

cipher.doFinal(ciphertext, 0, ciphertext.length - LENGTH_MAC_TAG)