• 一卡一密加密算法实现·EncryptionOneCardOneKey

注:当前函数加密算法过于简单,只用于文档说明举例,用户在具体程序中应设计更加完善复杂的加密算法以保证系统安全性

/************************************************
函数名称 : EncryptionOneCardOneKey
功    能 : 根据读到的IC卡卡号数据,进行运算,得到与卡号存在对应关系的密钥数据
由于每张IC卡的卡号都是唯一且长度固定4字节,所以对应生成的密钥数据也是唯一且长度固定6字节
            上述过程简称:1卡1密
参    数 : byte[] CardID:读取到的IC卡卡号数据·固定长度为4个字节
返 回 值 : byte[] Key:生成的密钥数据·固定长度为6个字节 
*************************************************/
public byte[] EncryptionOneCardOneKey(byte[] CardID)
{
  byte[] Key = new byte[6];

  Key[0] = (byte)(CardID[0] ^ CardID[1]);
  Key[1] = (byte)(CardID[1] ^ CardID[2]);
  Key[2] = (byte)(CardID[2] ^ CardID[3]);
  Key[3] = (byte)(CardID[0] ^ CardID[3]);
  Key[4] = (byte)(CardID[0] ^ CardID[2]);
  Key[5] = (byte)(CardID[1] ^ CardID[3]);

  return Key;
}
  • 动态数据加密算法实现· EncryptionDynamicData

注:当前函数加密算法过于简单,只用于文档说明举例,用户在具体程序中应设计更加完善复杂的加密算法以保证系统安全性

/************************************************
函数名称 : EncryptionDynamicData
功    能 : 将刷卡当前系统时间 与 密钥数据进行异或运算,得到动态数据
            因为刷卡当前时间是动态的,所以运算之后得到的数据也是动态的
参    数 : byte[] Key:密钥数据·固定长度为6个字节
            byte[] SystemTime:刷卡当前系统时间·固定长度为6个字节
                   例如:刷卡当前时间为:2022-11-11 12:30:30 
                   则 SystemTime[] = {0x22,0x11,0x11,0x12,0x30,0x30}
返 回 值 : byte[] DynamicData:生成的动态数据·固定长度为6个字节
*************************************************/
public byte[] EncryptionDynamicData(byte[] Key, byte[] SystemTime)
{
  byte[] DynamicData = new byte[6];

  DynamicData[0] = (byte)(Key[0] ^ SystemTime[0]);
  DynamicData[1] = (byte)(Key[1] ^ SystemTime[1]);
  DynamicData[2] = (byte)(Key[2] ^ SystemTime[2]);
  DynamicData[3] = (byte)(Key[3] ^ SystemTime[3]);
  DynamicData[4] = (byte)(Key[4] ^ SystemTime[4]);

  return DynamicData;
}

以一张默认出厂设置,卡号数据为FE 99 7A 44的M1S50卡为例,规定加密扇区为扇区0;动态数据写入到扇区0中的数据块1的前6个字节

  • 系统 · 发卡

  • 设备 · 读卡

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐