Leiten Sie den sha1-Hash von dem open64-binären base64-Wert ab

933
Tandy Freeman

Digital Cinema Packages enthalten Prüfsummen in folgendem Format, wie hier beschrieben :

$ openssl sha1 -binary 'dcpfile.xml' |openssl base64 IxcfhXNHlw+1bbDFu0kp8KRylpU= 

Wie kann ich einen Wert wie nehmen IxcfhXNHlw+1bbDFu0kp8KRylpU=und den ursprünglichen sha1-Hash ableiten, der ungefähr so ​​aussehen würde

$ openssl sha1 'dcpfile.xml'  SHA1(dcpfile.xml)= 23171f857347970fb56db0c5bb4929f0a4729695 

Mein Anwendungsfall ist, dass es nicht viele Prüfsummen-Validierungswerkzeuge gibt, die es Ihnen leicht ermöglichen, ein Prüfsummenmanifest des Typs md5sum zu validieren, das diese binären / base64-Werte verwendet, aber es gibt viele Werkzeuge, die sha1 validieren. Es wäre also toll, wenn ich es wüsste wie man diese Werte umkehrt, damit ich ein Skript schreiben könnte, das eine interoperabelere Liste von Hashes erzeugt.

1

1 Antwort auf die Frage

1
grawity

Beide Werte sind die gleichen Hashwerte - dieselben "binären" Bytes, die in zwei verschiedenen Kodierungen (Repräsentationen) dargestellt werden, und keiner ist "originaler" als der andere.

(Base64 hat 6 Bits pro Zeichen; hexadezimal aka Base-16 hat 4 Bits pro Ziffer. Drei Rohbytes, vier Base64-Ziffern, sechs Hex-Ziffern sind direkt konvertierbar.)

Nahezu jede Programmiersprache verfügt über Funktionen zum Kodieren / Dekodieren dieser Formate. Zum Beispiel in Shell-Tools:

  • Zum Dekodieren von Base64 in binäre Rohdaten verwenden Sie base64 -doder openssl base64 -d.

  • Verwenden Sie zum Kodieren von Binärdaten in Hexadezimalformat xxd -poder hexdump.

$ echo 23171f857347970fb56db0c5bb4929f0a4729695 | xxd -r -p | base64 IxcfhXNHlw+1bbDFu0kp8KRylpU=  $ echo IxcfhXNHlw+1bbDFu0kp8KRylpU= | base64 -d | hd 00000000 23 17 1f 85 73 47 97 0f b5 6d b0 c5 bb 49 29 f0 |#...sG...m...I).| 00000010 a4 72 96 95 |.r..| 
Perfekt, also diese 'openssl sha1 -binary' dcp_file.xml '| openssl base64 | base64 -d | xxd -p` wird `23171f857347970fb56db0c5bb4929f0a4729695` produzieren - jetzt muss ich nur noch alles in Python machen, von dem Sie wissen, dass Sie es herausgefunden haben. Vielen Dank! Tandy Freeman vor 6 Jahren 0
Importieren Sie `base64` und` binascii`. grawity vor 6 Jahren 1
Vielen Dank!! Das wird mein Leben so viel einfacher machen. Tandy Freeman vor 6 Jahren 0
`` `import binascii import base64 a = 'IxcfhXNHlw + 1bbDFu0kp8KRylpU =' b = base64.b64decode (a) binascii.hexlify (b) .decode () u'23171f857347970fb56db0c5bb4949f0a4747 Tandy Freeman vor 6 Jahren 0