有人能帮我指导Mifare Desfire的MAC(4字节)和CMAC(8字节)的计算吗?我得到了意想不到的结果。
Deskey = 0000000000000000
Block1(B1) = 1122334455667788
Block2(B2) = 9900112200000000
IV = 0000000000000000
sessionkey = 2923be84b1495461
R1 = Enc(B1 xor IV) f2f13994d24714ca
R2 = Enc(R1 xor B2) 880fe38ab9e8a8d3
MAC 880fe38a
Expected MAC = c8d70ad2 95a88a36CMAC结果
AESKey = 00000000000000000000000000000000
Block = 000102030405060708090a0b0c0d0e0f
Enc(Block) = 7aca0fd9bcd6ec7c9f97466616e6a282
SubKey1 = CDD297A9DF1458771099F4B39468565C
SubKey2 = 9BA52F53BE28B0EE2133E96728D0AC3F
CMAC(16bytes) = 8A57896F795CB6ABF6867DAD41A5FB15CMAC只由DES生成,TDES像DES一样加密除最终块之外的所有块,在零售MAC计算中应该加密TDES吗?
发布于 2012-09-11 17:12:34
在MAC计算方面,它似乎是3 3DES模式的数据加密,明文上填充为零,而V4为零。3 3DES密钥由XORing创建,会话密钥为24 0字节。以下是Java中的一个示例:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.xml.bind.DatatypeConverter;
public class MACTest {
public static void main(String[] args) throws Exception {
final byte[] keyBytes = new byte[24];
final byte[] paddedPlaintext =
hexStringToByteArray("11223344556677889900112200000000");
final byte[] iv = new byte[8];
final byte[] sessionKeyBytes = hexStringToByteArray("2923be84b1495461");
final byte[] derivedKeyBytes = new byte[24];
for (int i = 0; i < sessionKeyBytes.length; i++) {
derivedKeyBytes[i] = (byte) (keyBytes[i] ^ sessionKeyBytes[i]);
}
System.out.println(toHexString(derivedKeyBytes));
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
SecretKey derivedKey = factory.generateSecret(new DESedeKeySpec(
derivedKeyBytes));
Cipher c = Cipher.getInstance("DESede/CBC/NoPadding");
c.init(Cipher.ENCRYPT_MODE, derivedKey, new IvParameterSpec(iv));
byte[] result = c.doFinal(paddedPlaintext);
System.out.println(toHexString(result));
}
public static String toHexString(byte[] array) {
return DatatypeConverter.printHexBinary(array);
}
public static byte[] hexStringToByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}
}输出:
2923BE84B149546100000000000000000000000000000000
F2F13994D24714CA880FE38AB9E8A8D3您没有提供足够的信息来理解计算AES CMAC示例所需的内容,也不了解您的实际问题是什么。大概你没有得到预期的结果吧?
https://stackoverflow.com/questions/12345503
复制相似问题