You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

智能卡APDU安全消息MAC计算错误求助

智能卡APDU安全消息MAC计算错误求助

大家好,我现在在构造智能卡的安全消息时遇到了MAC计算不符的问题,按照示例步骤操作后得到的MAC值和预期结果对不上,想请各位帮忙看看哪里出错了!

先给大家列一下基础数据:

  • 原始Plain APDU:00 A4 00 00
  • 预期正确的kSMac:2F 34 E0 0D 1C 46 76 67 43 BA 6B 26 AB 20 4F D3
  • SSC(发送序列计数器):20 29 73 0A 6D 5E 7C C4

我的操作步骤如下:

  1. 先修改APDU的第一个字节,得到修改后的APDU:
byte[] modifiedAPDU = new byte[] { 0x0C, 0xA4, 0x00, 0x00 };
  1. 对修改后的APDU执行填充操作:
byte[] paddedAPDU = Pad(modifiedAPDU);
  1. 将SSC和填充后的APDU拼接在一起,顺序是SSC在前,填充后的APDU在后:
byte[] apduWithSSC = new byte[SSC.Length + paddedAPDU.Length];
Array.Copy(SSC, apduWithSSC, SSC.Length);
Array.Copy(paddedAPDU, 0, apduWithSSC, SSC.Length, paddedAPDU.Length);

我还打印了拼接后的内容用于校验:

Console.WriteLine("APDU with SSC: " + BitConverter.ToString(apduWithSSC).Replace("-", ""));
  1. 最后调用自定义的CalculateMac方法计算MAC:
byte[] mac = CalculateMac(apduWithSSC, kSMac);

下面是CalculateMac方法的部分实现:

static byte[] CalculateMac(byte[] data, byte[] key)
{
 // Initialize DES engine
 DesEngine desEngine = new DesEngine();

 // Initialize ISO9797Alg3Mac with DES engine, 64-bit block size, and ISO7816d4Padding
 // 后续的初始化和计算逻辑我就不贴全了,但目前得到的MAC和预期值完全对不上
}

我对照着示例一步步操作,但就是得不到正确的MAC值,有没有大佬能帮我排查下可能的问题点?比如填充方式是否符合规范、拼接顺序是不是搞反了,或者MAC算法的初始化参数有没有哪里配置错了?

备注:内容来源于stack exchange,提问作者Malata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:58:21