(3) 32-Zeichen-Hex-Hashes zu einem einzigen eindeutigen 32-Zeichen-Hash kombinieren?

StackOverflow https://stackoverflow.com/questions/9009807

  •  14-11-2019
  •  | 
  •  

Frage

Ich habe (3) MD5-Summen, die ich zu einem einzigen Hash kombinieren muss.Der neue Hash sollte 32 Zeichen lang sein, unterscheidet jedoch zwischen Groß- und Kleinschreibung und kann aus einem beliebigen Buchstaben oder einer beliebigen Zahl bestehen.Was ist der beste Weg, dies in Python zu tun?

War es hilfreich?

Lösung

Ich würde damit beginnen, die MD5-Hashes zu einem einzigen Hash zu kombinieren.Sie können SHA256 verwenden, da es am Ende mehr Bytes enthält:

>>> import hashlib
>>> combined = hashlib.sha256()
>>> combined.update(hashlib.md5('test1').digest())
>>> combined.update(hashlib.md5('test2').digest())
>>> combined.update(hashlib.md5('test3').digest())

Dann können Sie es mit base64 mit Buchstaben, Zahlen und einigen zusätzlichen Symbolen kodieren:

>>> import base64
>>> base64.b64encode(combined.digest())
'PeFC3irNFx8fuzwjAz+fE/up9cz6xujs2Z06IH2GdUM='

Wenn Sie nur 32 Zeichen lang sein möchten, schneiden Sie die letzten Bits ab:

>>> base64.b64encode(combined.digest())[:32]
'PeFC3irNFx8fuzwjAz+fE/up9cz6xujs'

Dies kann enthalten + Und / zusätzlich zu Buchstaben und Zahlen, wie Ihr OP vorschlägt.Wenn Sie sie ersetzen möchten, können Sie den zweiten Parameter für b64encode verwenden:

>>> base64.b64encode(combined.digest(), altchars="AA")[:32]
'PeFC3irNFx8fuzwjAzAfEAup9cz6xujs'

Andere Tipps

Der einfachste Weg wäre, die 3 Summen in eine einzige 96-Zeichen-Zeichenfolge zu kombinieren und einen MD5-Hash darauf auszuführen.

generasacodicetagpre.

Nur für ein anderer Weg, mit "Charakteren", um einen Unicode-Codepoint zu bedeuten, hier ist, was ich mitgekommen bin, einschließlich meines Bumpelns: generasacodicetagpre.

Ich hätte wahrscheinlich 13 Bits pro Charakter, um Interpunktion zu vermeiden, aber ich wollte die Zeit nicht investieren, da Sie sowieso nicht um die Reversibilität kümmerten.

[später] Nein, musste nicht: generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top