Wiegand 26读卡器可以从NFC卡中读取哪些数据?

8
我可以使用手机的NFC读卡器读取13.56 MHz NFC卡,并得到一个十六进制值,例如:

1BF52327

这代表卡片UID或序列号。
Wiegand读卡器能读取哪些数据?它能够读取相同的序列号吗?
由于Wiegand读卡器只能读取26位,它将读取什么确切的数据?
更新 我已经测试了上述内容。我使用了HID SE r10读卡器和一个非品牌读卡器。
以下是结果。
这是我手机的NFC读取的上述卡片(1BF52327)的二进制值:

11011111101010010001100100111

接下来,这是我从HID读卡器中获取的相同卡片的值:

1101100011011100000010101110010000000000

这是我从非品牌读卡器中获取的相同卡片的值:

1101110000001010111001000

我可以快速找到HID和非品牌读卡器之间的关联,最终它们几乎是相同的。
但是我无法将Wiegand读卡器读取的值与NFC读取的原始值相关联。
你有什么关于我做错了什么的想法吗?我在RPI和Arduino上使用了几个库,例如JoanWiegand-Protocol-Library-for-Arduino,并从Wiegand读卡器中获得了相同的值。
1个回答

8

Wiegand读卡器能够读取与手机相同的序列号吗?

13.56 MHz的Wiegand读卡器(更具体地说是ISO/IEC 14443 Type A)通常读取卡片/标签的防冲突标识符。手机似乎也会向您显示防冲突标识符(UID)。所以,是的,两个设备都读取相同的数据元素。

然而,正如您正确发现的那样,读卡器只通过Wiegand接口传输26位值(实际上只有24位,因为其中两位是奇偶校验位)。由于UID具有4字节、7字节或10字节,因此需要将UID截断为3字节值以通过Wiegand接口进行传输。

我可以从Wiegand读卡器中期望哪些数据?

在Wiegand接口上,帧看起来像这样:

b0  b1  b2  b3  b4  b5  b6  b7  b8  b9  b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23 b24 b25
PE  D23 D22 D21 D20 D19 D18 D17 D16 D15 D14 D13 D12 D11 D10 D9  D8  D7  D6  D5  D4  D3  D2  D1  D0  PO

第一行是Wiegand电线传输数据的编号,第二行是接收器解释后的位数。PE(b0)是D23..D12(b1..b12)的偶校验位,PO(b25)是D11..D0(b13..b24)的奇校验位,D23..D0是表示无符号整数数字的数据位(实际上是两个数字,因为高8位是站点代码,低16位是标签ID)。

虽然将站点代码和标签ID逻辑分开了,但这些读卡器通常只使用标签ID的截断形式作为24位值。

如何将该值映射到您手机上收到的十六进制值强烈取决于该十六进制表示法是如何创建的(特别是它的字节顺序)。可能仅仅需要取最后三个字节(F52327),但也可能是1BF523(或任何其反向字节(甚至位)的变化)。


更新:关于您读卡器得到的值...

首先,您似乎从值中省略了前导零。例如,1BF52327是一个4字节的值,有32位:

   1    B     F    5     2    3     2    7
0001 1011  1111 0101  0010 0011  0010 0111

似乎读卡器接收到的值也是如此(或者图书馆自动删除了前导奇偶校验位,或者删除了两个奇偶校验位并在值末尾添加了任意数量的零)。
所以你的值是: 1101 1000 1101 1100 0000 1010 1110 0100 0000 0000 1101 1100 0000 1010 1110 0100 0
正如你自己发现的那样,这些值明显相关,一个字节在开头缺失,HID读卡器的值在末尾填充更多的零。
仔细观察,这些值还与第一个二进制值相关。诀窍是首先反转这些值。因此,这些值
1101 1000  1101 1100  0000 1010  1110 0100  0000 0000
           1101 1100  0000 1010  1110 0100  0

成为
0010 0111  0010 0011  1111 0101  0001 1011  1111 1111
           0010 0011  1111 0101  0001 1011  1

对于来自Wiegand读卡器的值,这也将修复尾随的奇校验位(PO),因为现在有7个'1'位(包括PO)(尽管这可能只是巧合)。

您现在可以看到,这些值恰好代表反转字节顺序的第一个值。如果您反转字节顺序,则可以看到:

   1    B     F    5     2    3     2    7
0001 1011  1111 0101  0010 0011  0010 0111

你获得了什么

   2    7     2    3     F    5     1    B
0010 0111  0010 0011  1111 0101  0001 1011

将其与另外两个值进行比较,您会发现它们是匹配的:
0010 0111  0010 0011  1111 0101  0001 1011
0010 0111  0010 0011  1111 0101  0001 1011  1111 1111
           0010 0011  1111 0101  0001 1011  1

因此,您从HID读卡器接收到的值表示为2723F51B,而从Wiegand读卡器接收到的值表示为23F51B。因此,字节27被截断。


你好 @Michael Roland,感谢您的回答,我已经进行了测试并更新了问题。我现在遇到的问题是无法找到Wiegand读卡器和NFC读卡器读取值之间的相关性。您有什么想法吗?感谢您的时间。 - Adnan
非常感谢您详细的解释。这对我来说是一堂宝贵的课程。再次感谢。 - Adnan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接