Forum: Mikrocontroller und Digitale Elektronik RFID hex-dec


von Eric P. (eyk107)


Lesenswert?

Hallo an alle,

ich habe folgendes Szenario: einen fiktiven rfid-transponder 
(mglw.EM410x) mit der hex-UID: 0102b0c1fd
diese möchte ich umwandeln in eine 20 stellige ZK-Nummer. Hierfür wird 
jedes einzelne hex-Symbol in eine vierstelligen binärzahl umgewandelt.

00000001 00000010 10110000 11000001 11111101

Danach werden die einzelnen Gruppen gespiegelt:

1000 0000 0100 0000 0000 1101 1000 0011 1011 1111

Abschließend werden diese Werte nach ihrer binären Wertigkeit in 
dezimale Werte umgerechnet.

0800 0400 0000 1308 0311 15

08000400001308031115

Die Frage die sich mir nur stellt: Wieso werden die Bits gespiegelt? Ist 
dafür ein Protokoll/ Norm zuständig? Ich kann dazu leider absolut keine 
Informationen finden.

Vielen Dank für eure Hilfe.

Beste Grüße
Eyk

von Benjamin S. (recycler)


Lesenswert?

Bits werden meist gespiegelt, wenn das Zielsystem eine andere Endianess 
hat (vgl. Littel und Big Endian).
-> vgl. https://de.wikipedia.org/wiki/Byte-Reihenfolge

Dabei verwenden manche Systeme das höchstwertige Bit links und machne 
rechts.
Schau dir den Wikiartikel an.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Benjamin S. schrieb:
> Dabei verwenden manche Systeme das höchstwertige Bit links und machne
> rechts.
Unabhängig von der Endianess ist das niederwertigste Bit eines Bytes 
bei allen gängigen CPUs immer rechts.

Nur die Reihenfolge der Bytes im Speicher bzw. die Wertigkeit von 
aufeinander folgenden Bytes ist abhängig von der Endianess.

Eric P. schrieb:
> Die Frage die sich mir nur stellt: Wieso werden die Bits gespiegelt?
Mir stellt sich die Frage: warum wird die Information so unnötig 
aufgebläht? Man könnte das ganze ja noch vorlesen und als WAV-Datei 
speichern...

: Bearbeitet durch Moderator
von Eric P. (eyk107)


Lesenswert?

Lothar M. schrieb:
> Benjamin S. schrieb:
>> Dabei verwenden manche Systeme das höchstwertige Bit links und machne
>> rechts.
> Unabhängig von der Endianess ist das niederwertigste Bit eines /Bytes/
> bei allen gängigen CPUs immer rechts.
>
> Nur die Reihenfolge der Bytes im Speicher bzw. die Wertigkeit von
> aufeinander folgenden Bytes ist abhängig von der Endianess.
>
Vielen Dank erstmal für die Info.

> Eric P. schrieb:
>> Die Frage die sich mir nur stellt: Wieso werden die Bits gespiegelt?
> Mir stellt sich die Frage: warum wird die Information so unnötig
> aufgebläht? Man könnte das ganze ja noch vorlesen und als WAV-Datei
> speichern...


Ich habe einen RFID-Reader (parralax 28142) und mehrere 
Transponder(mglw. EM410x). Auf denen ist die 20-stellige ZK-Nummer 
aufgebracht. Um diese abzugleichen, musste ich die hex-Nummer umrechnen. 
Mir ist nur nicht bewusst, warum die Bits gespiegelt werden müssen.

Mfg
Eyk

von Sven (Gast)


Lesenswert?

Du bist dir sicher, dass die Daten richtig herum eingelesen werden?

Dein spiegeln würde darauf deuten, einfach immer nach links shiften.

Gruß Sven

von Markus F. (mfro)


Lesenswert?

Wenn die Daten seriell eingelesen werden, ist das möglicherweise schon 
die Ursache: LSB first statt MSB first (oder anders herum).

Mit Big- oder Little-Endian hat das jedenfalls nichts zu tun.

von Eric P. (eyk107)


Lesenswert?

Markus F. schrieb:
> Wenn die Daten seriell eingelesen werden, ist das möglicherweise schon
> die Ursache: LSB first statt MSB first (oder anders herum).
>
> Mit Big- oder Little-Endian hat das jedenfalls nichts zu tun.

Ist mir so beim seriellen einlesen noch nie aufgefallen, aber ja die 
Daten werden seriell eingelesen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Eric P. schrieb:
> Mir ist nur nicht bewusst, warum die Bits gespiegelt werden müssen.
Für mich sieht das aus, wie wenn einer ernsthafte Probleme mit der 
Zahlendarstellung hatte. Wer eine einstellige Hex-Zahl in eine 
zweistellige Dezimalzahl umrechnet und die mit ASCII-Zeichen darstellt, 
dem ist nicht zu helfen.

Oder es ist simple Obfuscation von Geheimniskrämern...

von Eric P. (eyk107)


Lesenswert?

Lothar M. schrieb:
> Eric P. schrieb:
>> Mir ist nur nicht bewusst, warum die Bits gespiegelt werden müssen.
> Für mich sieht das aus, wie wenn einer ernsthafte Probleme mit der
> Zahlendarstellung hatte. Wer eine einstellige Hex-Zahl in eine
> zweistellige Dezimalzahl umrechnet und die mit ASCII-Zeichen darstellt,
> dem ist nicht zu helfen.
>
> Oder es ist simple Obfuscation von Geheimniskrämern...

habe hier noch eine pdf zu dem Thema gefunden (Seite 3).

http://www.easyident.de/PDF%20Files/Umrechnung%20easyident%20Ausgabe%20in%20diverse%20Codes.pdf

Leider wird dort auch nicht erklärt wieso, noch finde ich irgendwelche 
Informationen zu einem "ZK-Code"

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Eric P. schrieb:
> Leider wird dort auch nicht erklärt wieso, noch finde ich irgendwelche
> Informationen zu einem "ZK-Code"

 Das wird (wahrscheinlich) so gemacht damit es komplizierter aussieht.
 Transponder-ID wird werksseitig festgelegt, mit Header und Paritybits
 ergibt das 64 bit.
 Das wird immer auf gleiche Art und Weise eingelesen und ergibt immer
 9 Header bits, 40 Data bits, 9 line parity bits und 4 column parity 
bits.

 Also besteht nutzbare Info aus einem Array von 40 bits.

 Ob du jetzt dieses Array von links nach rechts liest, ob Little- oder
 Big-Endian, ob Nibbles oder Bytes oder sonstwas, das bleibt dir
 überlassen - aber die Transponder-ID ist immer 40 bits lang und immer
 unique bzw. einmalig.

 P.S.
 Natürlich nur bis 1,099,511,627,775 Transponder.

 P.P.S.
 Ob du 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 als
 549,755,813,888 dekodierst, oder als
 1 bleibt dir überlassen.

: Bearbeitet durch User
von Eric P. (eyk107)


Lesenswert?

bitte nicht falsch verstehen, aber eine sichere Aussage kann mir keiner 
geben oder?

von Hmmm (Gast)


Lesenswert?

Eric P. schrieb:
> bitte nicht falsch verstehen, aber eine sichere Aussage kann mir keiner
> geben oder?

Was ausser "Ist halt so!" willst Du hören?

Genau wie die anderen gängigen Schreibweisen hat sich das mal jemand so 
ausgedacht, müsste Honeywell gewesen sein.

Wenn Du die Gedankengänge der Verantwortlichen kennen willst, kannst Du 
Dich ja dort erkundigen oder es einfach so hinnehmen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Eric P. schrieb:
> bitte nicht falsch verstehen, aber eine sichere Aussage kann mir keiner
> geben oder?

 Ja, ich kann es.

 Da die Spielerei mit rumspiegeln und Platzwechsel absolut keinen
 Einfluss, weder auf Sicherheit noch auf sonst etwas hat, ist es
 unnötig und dient nur dazu, Leute wie dich zu beeindrucken.

von Eric P. (eyk107)


Lesenswert?

Hmmm schrieb:
> Eric P. schrieb:
>> bitte nicht falsch verstehen, aber eine sichere Aussage kann mir keiner
>> geben oder?
>
> Was ausser "Ist halt so!" willst Du hören?
Ist halt so, ist für mich leider etwas mager als Antwort. Es hätte ja 
sein können das jmd schreibt, ja ist in Norm/ Standard XY beschrieben.

> Genau wie die anderen gängigen Schreibweisen hat sich das mal jemand so
> ausgedacht, müsste Honeywell gewesen sein.
Das ist doch schon mal eine brauchbare Information.


Marc V. schrieb:

>  Ja, ich kann es.
>
>  Da die Spielerei mit rumspiegeln und Platzwechsel absolut keinen
>  Einfluss, weder auf Sicherheit noch auf sonst etwas hat, ist es
>  unnötig und dient nur dazu, Leute wie dich zu beeindrucken.
Ja richtig, ich bin schwer beeindruckt. Ich wollte einfach nur wissen, 
ob dahinter ein tieferer Sinn steckt. Aber trotzdem Danke für deinen 
Beitrag...

: Bearbeitet durch User
von Philip (Gast)


Lesenswert?

... zumal die UID nur der Kollisionserkennung beim lesen der Karte(n) 
dient und nicht mit einer echten Unique ID wie z.B. MAC adresse 
verwechselt werden sollte.

von Joachim S. (oyo)


Lesenswert?

Eric P. schrieb:
> Ist halt so, ist für mich leider etwas mager als Antwort. Es hätte ja
> sein können das jmd schreibt, ja ist in Norm/ Standard XY beschrieben.

Wirklich wissen tue ich auch nichts, aber ich würde auch vermuten, dass 
sich da einfach jede Firma ihre eigene Darstellung ausdenkt, und es für 
die  von Dir beschriebene Darstellung keine Norm/keinen Standard gibt.

Für meinen 125kHz-RFID-Reader habe ich bspw. auch mal ein kleines Skript 
geschrieben und auf GitHub veröffentlicht, das die RFID in 
unterschiedlichen Darstellungen ausgeben kann:
https://github.com/oyooyo/record-stream-decoder#rfid_125khz
(Da findest Du am Ende auch Links zu zwei Webseiten, auf denen ein paar 
Darstellungen aufgelistet/beschrieben werden.)

Der Witz ist: Bei meinem Skript kann man alleine zwischen 13 
verschiedenen Darstellungen wählen, die ich irgendwo im Internet 
beschrieben gefunden habe - darunter ist aber keine einzige, bei der die 
Bits gespiegelt werden, es gibt also offenbar noch etliche mehr, als ich 
bislang dachte.

Was in dem von Dir verlinkten PDF "IK-2" genannt wird, könnte das sein, 
was ich irgendwo als "10H>13D" beschrieben gefunden habe.

Was in dem PDF "Acticon GmbH-Code" genannt wird, könnte wiederum das 
Format sein, das bei mir "08H>10D(int)" genannt wird.

Mein Eindruck war übrigens bislang, dass die einzige einigermassen 
standardisierte Darstellung bei 125kHz-Tags die 10-stellige Dezimalzahl 
ist, die auf ausnahmslos allen 125kHz-Tags aufgedruckt ist, die ich 
bislang (aus unterschiedlichen Quellen) gekauft habe. Diese Darstellung 
wird bei meinem Script "08H>10D" genannt, und müsste die gleiche 
Darstellung sein wie die in Deinem Dokument "Acticon GmbH-Code" genannte 
Darstellung - nur mit vorangestellten Nullen, um immer auf 10 
Dezimalstellen zu kommen.

Selbst das ist aber offensichtlich keineswegs bei allen Tags so, wenn Du 
sagst, dass auf Deinen Tags stattdessen eine 20-stellige Zahl 
aufgedruckt ist...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Eric P. schrieb:
> Ja richtig, ich bin schwer beeindruckt. Ich wollte einfach nur wissen,
> ob dahinter ein tieferer Sinn steckt.

 Mit Sicherheit nicht.

 Die Karten-ID ist 5 Bytes lang und es wird garantiert (immer noch),
 dass diese ID einmalig ist. Da kannst du spiegeln, drehen, vertauschen
 oder sonstwas tun - es wird weder sicherer noch unsicherer dadurch.

 Auf der Karte selbst sind nur die 3 niederwertigsten Bytes aufgedruckt.

 Falls für die Karten-ID folgendes gelesen wird:
 0x34-0x00-0xC2-0xC4-0x69

 Auf der Karte wird dann folgendes aufgedruckt:
 0012764265   194,50281
 ^        ^    ^    ^
 |        |    |    |
 10 Stellen  0xC2 0xC469
 Dezimal
 0xC2C469

: Bearbeitet durch User
von Joachim S. (oyo)


Lesenswert?

Marc V. schrieb:
>  Auf der Karte selbst sind nur die 3 niederwertigsten Bytes aufgedruckt.
>
>  Falls für die Karten-ID folgendes gelesen wird:
>  0x34-0x00-0xC2-0xC4-0x69
>
>  Auf der Karte wird dann folgendes aufgedruckt:
>  0012764265   194,50281
>  ^        ^    ^    ^
>  |        |    |    |
>  10 Stellen  0xC2 0xC469
>  Dezimal
>  0xC2C469

Genau, das ist auch die Darstellung, die auch ich von allen meinen 
RFID-Karten im Kreditkarten-Format kenne. Auf den kleineren, runden Tags 
hingegen steht bei mir nur die erste Darstellung, als zehnstellige 
Dezimalzahl.

Allerdings bin ich recht sicher, dass nicht die drei, sondern die vier 
niederwertigsten Bytes aufgedruckt sind. Das macht imo auch deshalb 
Sinn, weil
- der maximale Wert einer 4*8=32-Bit-Zahl in Dezimaldarstellung eben 
10-stellig ist, während bei 3 Bytes ja 8 Dezimalziffern genügen würden
- m.W.n. die unteren vier Bytes die "ID" darstellen, während im 
obersten/fünften Byte "Revision" und "Vendor" kodiert sind

von schneeer (Gast)


Lesenswert?

Damit die Sicherheitstechnik schön kompliziert und nicht gleich auf 
andere Systeme übertragen werden kann ist immer alles schön kompliziert 
oder abgeschottet.
Im  Klartext: Die UID ist fest eingebrand im Transponder, aber jeder 
Hersteller hat u.U. sein eigenes Leseverfahren bzw. seine eigene 
Interpretation/Darstellung dieser UID.

Daher gibt es mehrere Möglichkeiten eine UID auszulesen, einzugeben und 
zu benutzen.
Bsp. einer UID eines UNI-, EM42xx- 125KHz-.... Transponders:

UID (Hex10):                   AF34781265
IK2:                           0752499561061
IK3/IS-Code:                   1053007169702
ZK-Code/Codierung:             15050212011404081006
COMLock (Hex8):                34781265
Dorma XS:                      1787093442
TelenotX, Acticon, Wiegand 34: 0880284261
Wiegand 32:                    1343204709
Wiegand 26:                    12004709
ELV TimeMaster:                7869029

Oben stehende Nummern sind alles Darstellungen der ein und selben 
Transponder UID, umgerechnet in das Format des jeweiligen Zielsystems, 
welches auch noch abhängig vom jeweiligen Leser ist.
Um es noch verwirrender zu machen: Eine Einbruchmeldeanlage arbeitet mit 
dem (d.h. liest zwar den) IK3-Code, stellt aber in der 
Programmiersoftware den IK2 dar.

Informationen dazu findet man im Internet sehr wenig bis keine.
Wem es etwas hilft, auf meiner Homepege kann ein Programm zur Umrechnung 
aller hier genannten Codes heruntergeladen werden:
www.schneeer.npage.de

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.