SHA1 Codierung
dobra
- perl
0 Sven Rautenberg0 hotti0 Jens Holzkämper0 hotti
0 Struppi0 Beat0 dobra
Hallo,
ich habe ein Problem mit der sha1 Verschlüsselung :(
Test-String:
28423|78017||||AT|199|EUR|DEMO Bestellung||||||||degh065c
DIESES Ergebnis würde ich brauchen:
88ef9c430a2ceb7411f8c14b9a2a1a9fbb38d4d0 # korrekter Code
mit
use Digest::SHA1 qw(sha1);
...
my $str = join("|",@data);
main::mprint Digest::SHA1::sha1($str);
(auch mit "print" statt "main::mprint" = mein framework-Perl kein Unterschied)
bekomme ich aber
hier waren div Hiroglyphen die aber nicht akteptiert wurden # mit sha1()
bzw im Quelltext:
om%E2%84%A2%C3%8D%C3%BF%CB%9C%C3%80%C3%8D%18%1B%C2%B8N%02%C2%B5%C5%B8]%E2%80%9CDP1"
hab's auch mit sha1_hex() versucht - so bekomme ich zwar einen Code, aber einen "falschen"
6f6d99cdff98c0cd181bb84e02b59f5d93445031
Das selbe Ergebnis habe ich online und offline.
Was mache ich falsch?
Fehlt da irgendwo noch eine UFT-8 Codierung?
Habe jetzt schon 3 Stunden gegoogelt aber keinen Hinweis zur Lösung gefunden.
Kann mir vielleicht hier jemand helfen?
mfG
dobra
Moin!
ich habe ein Problem mit der sha1 Verschlüsselung :(
Test-String:
28423|78017||||AT|199|EUR|DEMO Bestellung||||||||degh065cDIESES Ergebnis würde ich brauchen:
88ef9c430a2ceb7411f8c14b9a2a1a9fbb38d4d0 # korrekter Code
...
hab's auch mit sha1_hex() versucht - so bekomme ich zwar einen Code, aber einen "falschen"
6f6d99cdff98c0cd181bb84e02b59f5d93445031Das selbe Ergebnis habe ich online und offline.
Was mache ich falsch?
SHA1 ist, genau wie alle anderen Hash-Algorithmen, extrem empfindlich gegenüber minimalsten Abweichungen. Du brauchst nur ein einzelnes Bit falsch zu haben, schon weicht dein Ergebnis-Hash komplett von der Erwartung ab.
Deshalb hilft dir da auch kein Raten: Ermittle exakt, wie im Original aus dem String der Hash gebildet wird, und vollziehe diesen Arbeitsgang 100% nach. Also im Prinzip Copy&Paste des Codes. Oder halt Einbindung der erzeugenden Subroutine. Alles andere führt fast zwangsläufig zu Problemen, wie du ja siehst.
Und da ist dir auch mit einer noch so guten Beschreibung deines Problems nicht zu helfen. Wenn das Ergebnis abweicht, ist festzustellen, dass du nicht dasselbe in den SHA1-Algorithmus reinsteckst, wie das Original, oder dass du bei der Anwendung von SHA1 irgendwas anders machst, als das Original. Ohne Kenntnis des Vorgangs beim Original kann man leider auch nur raten - und solange rumprobieren, bis es zufällig irgendwann klappt, ist nicht zielführend, da kann man u.U. sehr lange rumprobieren.
Fehlt da irgendwo noch eine UFT-8 Codierung?
Dein Teststring enthält keine Zeichen, die außerhalb von 7-Bit-ASCII liegen. Also verhalten sich ISO-8859-1, Windows-1252 und UTF-8 absolut identisch. Daran wird es also vermutlich eher nicht liegen.
- Sven Rautenberg
hi,
Fehlt da irgendwo noch eine UFT-8 Codierung?
Dein Teststring enthält keine Zeichen, die außerhalb von 7-Bit-ASCII liegen. Also verhalten sich ISO-8859-1, Windows-1252 und UTF-8 absolut identisch. Daran wird es also vermutlich eher nicht liegen.
Endlich maln Satz der den Mythos "UTF-8" entschärft. Danke Sven!
Viele Grüße,
Horst Bitmann
Tach,
Endlich maln Satz der den Mythos "UTF-8" entschärft. Danke Sven!
?
mfg
Woodfighter
Tach,
Endlich maln Satz der den Mythos "UTF-8" entschärft. Danke Sven!
?
^ genau ;-)
Schönen Sonntag,
Horst
mit
use Digest::SHA1 qw(sha1);
...
my $str = join("|",@data);
main::mprint Digest::SHA1::sha1($str);(auch mit "print" statt "main::mprint" = mein framework-Perl kein Unterschied)
bekomme ich aber
hier waren div Hiroglyphen die aber nicht akteptiert wurden # mit sha1()
bzw im Quelltext:
om%E2%84%A2%C3%8D%C3%BF%CB%9C%C3%80%C3%8D%18%1B%C2%B8N%02%C2%B5%C5%B8]%E2%80%9CDP1"
Das ist nicht das, was du mit der Verschlüsselungsfunktion bekommst, es sei denn du hast ein anderes Digest::SHA1 als ich. B ei mir sieht das völlig anders aus.
hab's auch mit sha1_hex() versucht - so bekomme ich zwar einen Code, aber einen "falschen"
6f6d99cdff98c0cd181bb84e02b59f5d93445031
Dann machst du etwas falsch, ich bekomme:
88ef9c430a2ceb7411f8c14b9a2a1a9fbb38d4d0
Was ziemlich genau dem entspricht was du willst.
Was mache ich falsch?
Du zeigst uns nicht das was du wirklich machst.
Struppi.
ich habe ein Problem mit der sha1 Verschlüsselung :(
Test-String:
28423|78017||||AT|199|EUR|DEMO Bestellung||||||||degh065cDIESES Ergebnis würde ich brauchen:
88ef9c430a2ceb7411f8c14b9a2a1a9fbb38d4d0 # korrekter Code
Das ist also hexadezimal Schreibweise
mit
use Digest::SHA1 qw(sha1);
Dann verwende auch die hexadezimale Methode
sha1_hex
mfg Beat
Vielen Dank für Eure Hilfe!
Ich habe den Fehler gefunden - ein dynamischer Wert im String wurde nicht richtig ersetzt.
SO konnte natürlich auch kein korrekter Code mit sha1_hex($str) generiert werden.
Mit dem *richtigen* String funktioniert's wie es soll :)
Danke
dobra