
93578
19.10.2018, aktualisiert um 12:44:29 Uhr
Alle Strings vor "-" durch Hash-Wert (SHA1) zu ersetzen
Hallo an alle,
ich habe folgendes Problem:
Eine txt-Datei sieht so aus:
Wie kann man alle Wörter in allen Zeilen, die vor "-" stehen in ein SHA1-Hash umwandeln?
Endergebnis soll etwa so aussehen:
Kann mir da jemand von Euch helfen?
Gruß,
Takitano
ich habe folgendes Problem:
Eine txt-Datei sieht so aus:
aa-1
bbbbbbbbbb-12
cccccccccccccccccc-123
ddd_ddd-1234
eeeeeee-12345
ffffff-123456
ggggg.ggggg-1234567
Wie kann man alle Wörter in allen Zeilen, die vor "-" stehen in ein SHA1-Hash umwandeln?
Endergebnis soll etwa so aussehen:
e0c9035898dd52fc65c41454cec9c4d2611bfb37-1
45dfb79d668374f6578b3128746dce59b7a02e80-12
3990cdbab32e246d507b4297c361267a1713c9f2-123
5b567480718b3aab32c5295786d9949736ab19b4-1234
d6004a0f8fbb84595534a0f8323613b681917597-12345
c81019207890deb5cba8cda1de0dd6b1c229eeff-123456
8b1d3478a656980da1111f7cee36a2866ffa3c99-1234567
Kann mir da jemand von Euch helfen?
Gruß,
Takitano
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 390108
Url: https://administrator.de/forum/alle-strings-vor-durch-hash-wert-sha1-zu-ersetzen-390108.html
Ausgedruckt am: 15.05.2025 um 06:05 Uhr
11 Kommentare
Neuester Kommentar
Powershell
$Sha = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider
$Enc = [system.Text.Encoding]::UTF8
$Lines=Get-Content C:\temp\Input.txt
$Lines | %{
$_ -match "(^.*)(-\d*)" | Out-Null
$Data=$Enc.GetBytes($matches[1])
$Hash=$Sha.ComputeHash($Data)
$Hash=[System.BitConverter]::ToString($Hash) -replace "-",""
$New=$Hash+$matches[2]
write-host $New
}
Moin,
Quick-'n-Dirty-Lösung:
Der Einzeiler
ergibt als Ausgabe:
lks
Quick-'n-Dirty-Lösung:
Der Einzeiler
lks@nana:~$ echo -n "aa-1
bbbbbbbbbb-12
cccccccccccccccccc-123
ddd_ddd-1234
eeeeeee-12345
ffffff-123456
ggggg.ggggg-1234567" | gawk -F "-" ' { print system("echo -n " $1 " | sha1sum - ; echo -n " $2) } ' | sed -e ':a;N;$!ba;s/ *-\n/-/g' | sed -e "s:0$::g"
e0c9035898dd52fc65c41454cec9c4d2611bfb37-1
45dfb79d668374f6578b3128746dce59b7a02e80-12
3990cdbab32e246d507b4297c361267a1713c9f2-123
33fe852449b2dd83f7ed54168239655a54de04f9-1234
d6004a0f8fbb84595534a0f8323613b681917597-12345
c81019207890deb5cba8cda1de0dd6b1c229eeff-123456
8b1d3478a656980da1111f7cee36a2866ffa3c99-1234567
lks
Zitat von @93578:
2) Lochkartenstanzer, deine Lösung sieht fast perfekt aus, aber...
Wenn ich solche Zeilen habe:
wird das Ergebnis so dargestellt:
2) Lochkartenstanzer, deine Lösung sieht fast perfekt aus, aber...
Wenn ich solche Zeilen habe:
abcdefgh-12345-12345
> afwffwgegeb-1234567-123456-12345
wird das Ergebnis so dargestellt:
SHA1-12345
> SHA1-1234567
Dann spezifieziere korrekt und paß die quick'n-Dirty-Lösung Deinen Bedürfnissen an. Die Werkzeuge (awk, sed, echo, pipe) hast Du ja.
Die restlichen Symbole werden also abgeschnitten. Ich brauche aber alle Symbole nach dem ersten "-". Kann man da was machen?
Ja. paß das awk-Statement an.
lks
Zitat von @93578:
Leider bin ich im Linux eine Niete...
Mit "sha1sum - ; echo -n " $0) " bekomme ich:
SHA1-abcdefgh-12345-12345.
Im Internet finde ich nichts dazu.
Leider bin ich im Linux eine Niete...
Mit "sha1sum - ; echo -n " $0) " bekomme ich:
SHA1-abcdefgh-12345-12345.
Im Internet finde ich nichts dazu.
http://www.grymoire.com/Unix/Sed.html
https://www.gnu.org/software/gawk/manual/gawk.html
http://openbook.rheinwerk-verlag.de/shell_programmierung/shell_014_000. ...
http://openbook.rheinwerk-verlag.de/shell_programmierung/shell_015_000. ...
lks
PS. Ich schau mal nachher, wenn ich Luft habe, was sich da machen läßt.
PPS: Spezifizier mal das genaue Eingabeformat! Denn
Evtl. wichtig:
1) "-" kommt in diesen Wörtern (die umgewandelt werden sollen) nicht vor. Also kann man "-" als eindeutiiges Merkmal/Trennzeichen nutzen.
2) alle Wörter vor "-" bestehen nur aus ASCII-Zeichen
1) "-" kommt in diesen Wörtern (die umgewandelt werden sollen) nicht vor. Also kann man "-" als eindeutiiges Merkmal/Trennzeichen nutzen.
2) alle Wörter vor "-" bestehen nur aus ASCII-Zeichen
ist etwas anderesals Du jetzt sagst.