记录一些M1卡密钥计算方式和校验位计算方式
前言
最近这两年陆陆续续收到一些M1卡的数据,每次简单滴破解了一下之后感觉挺有意思的,但是害怕以后没过多久就忘记了,所以打算以我能看懂的形式浅浅的记录一下。
密钥算法
算法一
这是个非常非常非常简单的算法,只涉及到了异或
UID和Key的映射关系如下图:
具体算法:
u2 XOR 12 = k1
u4 XOR A5 = k2
u3 XOR 34 = k3
u4 XOR AB = k4
u2 XOR 6A = k5
u1 XOR 36 = k6
u1,u2,u3,u4分别对应UID的第一,第二,第三和第四位,k1-k6分别对应Key中的第一到第六位。
一些数据
算法二
这个算法是某个学校的水卡的密钥算法,可以说算是非常地复杂了,当时花了一个星期才破解出来。这个对应关系有点复杂,每一位的第一个和第二个数字有其单独的对应。
UID和Key的映射关系:
每一位Key的算法都有点复杂,比如
Key1
以这个为原像,建立k1的映射
映射之后如下:
这里我们设第一个数字为a,第二个数字为b,则k1的算法可表示为:
a XOR 1 = 第一位数字
(30 - b) % 16 = 第二位数字
这算是6位key中最简单的一个了。
Key2
由原像映射的像如下
算法:
如果 0 <= b < 7:
则 (20 - a) % 16 = 第一位数字
如果 7 < b < 16
则 (19 - a) % 16 = 第一位数字
b XOR 1 = 第二位数字
Key3
映射关系
算法:
如果 0 <= b < 7:
则 ((a + 1) % 16) XOR 5 = 第一位数字
如果 7 < b < 16
则 a XOR 5 = 第一位数字
(23 - b) % 16 = 第二位数字
Key4
映射关系
算法:
当0 <= a < 14时
((a + 6) % 16) XOR 3 = 第一位数字
当13 < a < 16时
((a + 5) % 16) XOR 3 = 第一位数字
((b + 3) % 16) XOR A = 第二位数字
Key5
映射关系
算法
当0 <= b < 12时
a XOR C = 第一位数字
当 11 < b < 16时
((a + 1) % 16) XOR C = 第一位数字
(20 - b) % 16 XOR 4 = 第二位数字
Key6
映射关系
算法:
a XOR 1 = 第一位数字
(30 - b)% 16 = 第二位数字
算法三
累了,有空再写