Hallo Leute!
In der Hoffnung das sich hier User befinden die C+ verstanden haben die mir was erklären können.
Also es geht um Bit-Manipulation im Sinne einer "Verschlüsselung", allerdings ziemlich probitär.
Ein Aussensensor sendet verschlüsselte Datenpakete zu seiner Wetterstation.
Das Protokoll ist geknackt, die fundstelle im Web:
members.upc.nl/m.beukelaar/Crestaprotocol.pdf
Rohdaten vom Sensor sind z.B. in Hex: C3 BA CA 7D BF CF 51 und müssen wie folgt "entschlüsselt" werden:
C+:
return b ^ (b << 1)
Soweit ist noch logisch und für mich nachvollziehbar:
Das Byte 1 mit Wert hC3 wird um eine stelle Left geshiftet:
hC3 = b11000011 Shift Left 1 = b10000110 = h86
Dann den Originalwert C3 ExOR dem geshifteten Wert h86 fürt zum korrekt entschlüsselten Wert h45.
Nur mit dem Rückweg habe ich ein Verständnissproblem.
Also das Verschlüsseln eines Bytes, z.B. diese h45 wieder zurück in den Rohwert hC3.
In oben verlinkter PDF auf Seite 7 steht dazu:
Alles anzeigen
Hier insbesondere die Zeilen 5 und 24-26
Grüße
Jürgen
In der Hoffnung das sich hier User befinden die C+ verstanden haben die mir was erklären können.
Also es geht um Bit-Manipulation im Sinne einer "Verschlüsselung", allerdings ziemlich probitär.
Ein Aussensensor sendet verschlüsselte Datenpakete zu seiner Wetterstation.
Das Protokoll ist geknackt, die fundstelle im Web:
members.upc.nl/m.beukelaar/Crestaprotocol.pdf
Rohdaten vom Sensor sind z.B. in Hex: C3 BA CA 7D BF CF 51 und müssen wie folgt "entschlüsselt" werden:
C+:
return b ^ (b << 1)
Soweit ist noch logisch und für mich nachvollziehbar:
Das Byte 1 mit Wert hC3 wird um eine stelle Left geshiftet:
hC3 = b11000011 Shift Left 1 = b10000110 = h86
Dann den Originalwert C3 ExOR dem geshifteten Wert h86 fürt zum korrekt entschlüsselten Wert h45.
Nur mit dem Rückweg habe ich ein Verständnissproblem.
Also das Verschlüsseln eines Bytes, z.B. diese h45 wieder zurück in den Rohwert hC3.
In oben verlinkter PDF auf Seite 7 steht dazu:
Quellcode
- /* Encrypt data byte to send to station */
- BYTE EncryptByte (BYTE b)
- {
- BYTE a;
- for(a=0; b; b<<=1) a^=b;
- return
- a;
- }
- BYTE WindDirSeg(BYTE b)
- {
- /* Encrypted using: a=-a&0xf; b=a^(a>>1);
- I don’t see any easy reversed formula.
- i.e. I can’t solve “a” from the equ b=a^(a>>1)
- in one easy single formula. So I solve it
- bit by bit in this method. Does anyone have
- a better solution?
- NOT like this
- :
- b &= 0xf;
- return (-(b ^ (b >> 1) ^ (b >> 2) ^ (b >> 3))) & 0xf;
- It works... But is, of course, also a bit by bit solution.
- */
- b ^= (b & 8) >> 1; /* Solve bit 2 */
- b ^= (b & 4) >> 1; /* Solve bit 1 */
- b ^= (b & 2) >> 1; /* Solve bit 0 */
- return -b & 0xf;
- }
Grüße
Jürgen