SHAFingerPrint und Unicode

Anfängerfragen zum Programmieren mit PureBasic.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

SHAFingerPrint und Unicode

Beitrag von ThoPie »

Hallo zusammen,

ich bin gerade dabei mein Programm auf UniCode zu testen bzw. umzustellen. In meinem Programm wird ein FingerPrint des Passwortes in ASCII gespeichert. Bei der Umstellung bin ich auf ein Problem gestoßen. Sollten die folgenden beiden Debug-Ausgaben nicht identisch sein oder habe ich bei der Umsetzung etwas falsch gemacht.

Vielen Dank für eure Hilfe.

Code: Alles auswählen

Declare.s SHA1FingerprintAscii(T.s)
Global.s PWT
PWT="hundkatzemaus"
Debug SHA1FingerprintAscii(PWT)
Debug SHA1Fingerprint(@PWT,StringByteLength(PWT))

Procedure.s SHA1FingerprintAscii(T.s)
  Protected.i *Puffer
  Protected.s SHA
  ; SHA - SHA-Fingerprint
  *Puffer=AllocateMemory(40)
  PokeS(*Puffer,T,40,#PB_Ascii)
  SHA=SHA1Fingerprint(*Puffer,MemorySize(*Puffer))
  FreeMemory(*Puffer)
  ProcedureReturn SHA
EndProcedure
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: SHAFingerPrint und Unicode

Beitrag von _JON_ »

Der erste Hash ist von einem Unicode String und der Zweite von einem Ascii, somit sollten sie nicht identisch sein.

Das mit der Länge sollteste noch anpassen. Wie wäre es hiermit

Code: Alles auswählen

Procedure.s SHA1FingerprintAscii(T.s)
  Protected *Puffer, SHA.s, ilen
  
  ilen = Len(T)
  If Not ilen : ProcedureReturn "" : EndIf
  
  *Puffer = AllocateMemory(ilen)
  PokeS(*Puffer,T,ilen,#PB_Ascii)
  SHA=SHA1Fingerprint(*Puffer,MemorySize(*Puffer))
  FreeMemory(*Puffer)
  ProcedureReturn SHA
EndProcedure
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: SHAFingerPrint und Unicode

Beitrag von STARGÅTE »

Hier noch mal ein paar Hintergrundinformationen:

Prüfsummen bzw. Fingerprints sind Byte-basierende algorythmen.
Eine Zeichenkette wird hingegen in Characters gespeichert.
Im Ascii-Modus ist ein Character = einem Byte.
Bei Unicode hingegen, nimmt ein Zeichen immer 2 Bytes ein.
Bei UTF8, ist es sogar so, dass es auf den Buchstaben ankommt, wie viele Bytes er nutzt.

Wenn du unabhängig von Ascii/Unicode kompilierten EXEs sein möchtest, solltest du alle Codes wie:
@String unterlassen, da der String ja je nach Modus eine andere Byte-Sequenz hat.
Stattdessen, wie du es in deiner eigene Prozedur gemacht hast, den String erst in einem von dir definierten Format in den Speicher schreiben, damit die Byte-Sequenz immer die gleiche ist.

Hier mal meine Version von SHA1 (Kompilermodus unabhängig):

Code: Alles auswählen

Procedure.s SHA1(String.s, Flags.i=#PB_UTF8)
  
  Protected Length.i = StringByteLength(String, Flags)
  Protected *Buffer  = AllocateMemory(Length)
  Protected Result.s
  
  PokeS(*Buffer, String, #PB_Default, Flags|#PB_String_NoZero)
  Result = SHA1Fingerprint(*Buffer, Length)
  FreeMemory(*Buffer)
  
  ProcedureReturn Result
  
EndProcedure


Debug SHA1("Äpfel", #PB_Ascii)
Debug SHA1("Äpfel", #PB_UTF8)
Debug SHA1("Äpfel", #PB_Unicode)
Schön zu sehen, dass je nach Stringformat der Hash ein anderer ist, aber eben immer der gleiche egal ob man die EXE in Ascii oder Unicode kompiliert. Man muss sich halt entscheiden, was nötig ist, wenn die Passwörter auch griechische Zeichen oder so haben sollen, wäre Ascii natürlich schlecht.
Zuletzt geändert von STARGÅTE am 10.09.2014 15:29, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: SHAFingerPrint und Unicode

Beitrag von ts-soft »

StringByteLen() ist dabei natürlich verkehrt, da ansonsten 2 verschiedene lange Strings verglichen werden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: SHAFingerPrint und Unicode

Beitrag von Bisonte »

ts-soft hat geschrieben:StringByteLen() ist dabei natürlich verkehrt, da ansonsten 2 verschiedene lange Strings verglichen werden.
Wieso sollte das verkehrt sein ?

Es wird doch das Format mit angegeben. Somit muss man bei dem Vergleich auch das Format angeben, damit es wieder passt .... oder würfel ich da schon wieder was durcheinander ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: SHAFingerPrint und Unicode

Beitrag von ts-soft »

Bei dem Beispiel von ThoPie, nicht bei STARGÅTE Beispiel!

Das gab es zur Zeit meines Postings noch nicht so wirklich :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: SHAFingerPrint und Unicode

Beitrag von Bisonte »

ts-soft hat geschrieben:Bei dem Beispiel von ThoPie, nicht bei STARGÅTE Beispiel!

Das gab es zur Zeit meines Postings noch nicht so wirklich :lol:
Achso... Allerdings mach ich mir Sorgen, wenn du für diesen Satz schon 4 Minuten brauchst :lol:
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: SHAFingerPrint und Unicode

Beitrag von ThoPie »

Vielen Dank euch Allen.
Bild
Antworten