M1卡密钥控制位

1、对”08 77 8F 69”值进行计算,该值定位于各区块3的6,7,8,9四个字节内,字节6=08,字节7=77, 字节8=8F,   字节9=69(默认值,不予计算)。

2、例如:字节6=08,对应其二进制值=00001000, 则对6,7,8这三个字节进行二进制转换结果见下表:

字节6 = 0 0 0 0 1 0 0 0字节7 = 0 1 1 1 0 1 1 1字节8 = 1 0 0 0 1 1 1 1

3、参照表2及表4算法,字节6的全部二进制值取反,字节7的低四位二进制值取反,字节8不变,得到:

字节号对应二进制值位置高4位置低4
字节6 
字节7 
字节8
0 0 0 0 1 0 0 0
0 1 1 1 0 1 1 1
1 0 0 0 1 1 1 1
C2Y
C1Y
C3Y
1 1 1 1
0 1 1 1
1 0 0 0
C1Y
C3Y
C2Y
0 1 1 1
1 0 0 0
1 1 1 1
   块3 块2
verted-space”> 
块1 块0
块3 块2 块1 块0

4、对以上6,7,8字节的存取/控制二进制已取反值,依照表2,表4块位转换为各块控制值,如下表:

3字节7,字节6,字节8 = C13C23C33 = C1YC2YC3Y = 0 1 1
2
1
0
字节7,字节6,字节8 = C12C22C32 = C1YC2YC3Y = 1 1 0
字节7,字节6,字节8 = C11C21C31 = C1YC2YC3Y = 1 1 0
字节7,字节6,字节8 = C10C20C30 = C1YC2YC3Y = 1 1 0

注意: 高4位的各块值=低4位的各块值时,其值可用。高4位值≠低4位值时,其值不可用!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
S50卡的密钥A和密钥B可以通过修改卡片的访问控制(AC)来实现。以下是一个示例代码,可以通过修改卡片的AC来修改密钥A和密钥B。 ```python from smartcard.System import readers from smartcard.util import toHexString, toBytes # S50卡的默认密钥A和密钥B DEFAULT_KEY_A = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] DEFAULT_KEY_B = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] # 修改密钥A和密钥B的AC值 new_key_A = [0x11, 0x22, 0x33, 0x44, 0x55, 0x66] new_key_B = [0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC] new_AC = [0x78, 0x77, 0x88, 0x11, 0x00] # 获取读卡器 r = readers()[0] # 连接卡片 connection = r.createConnection() connection.connect() # 选择MF目录 resp = connection.transmit(toBytes("00A40004023F00")) # 选择S50卡的目录 resp = connection.transmit(toBytes("00A40004021001")) # 选择要修改的块 block_number = 4 resp = connection.transmit(toBytes("00B00000" + "{:02X}".format(block_number) + "10")) # 读取块的原始数据 old_data = resp.getData() # 修改块的访问控制(AC)和密钥A和密钥B new_data = old_data[:6] + new_AC + new_key_A + old_data[14:20] + new_key_B + old_data[26:] # 写入修改后的块数据 resp = connection.transmit(toBytes("00D600" + "{:02X}".format(block_number) + "10" + toHexString(new_data))) # 断开连接 connection.disconnect() ``` 需要注意的是,以上代码仅适用于S50卡,并且需要使用正确的块号来选择要修改的块。在实际使用中,需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值