Jag vill låta användaren logga in till mitt program. För lösenordsinmatningen tänkte jag använda JPasswordField, vars metod getPassword() returnerar en char[], hur gör jag för att hasha detta lösenord till en SHA1-sträng på 40 tecken (SHA-1 160 bitar)? Har tittat lite på MessageDigest-paketet men får inte fram nåt vettigt.
Jag antar att Digest är den binära hash-summan. Går det att få det i en sträng? så jag enklare kan spara den i XML och databaser, den ska ju vara 40 tecken då. Har bara gjort detta i PHP förut.
Ett alternativt sätt som tydligen ska vara effektivt;
String hex = new java.math.BigInteger(1, sha.digest()).toString(16);
Ja, det var ju klart snyggare än de andra jag testat, har googlat lite, men alla metoder verkar ge samma resultat som jag redan skrivit för Java. Testade nu i MySQL och det gav samma svar som PHP, så det verkar som de använder nån annan algorithm för att göra om SHA-1 till Hex-sträng.
Jag letade runt lite, och har uppfattat det som att problemet beror på att Java "kastar bort" inledande 0. Så 0x01 resulterar i 1 och inte 01, t.ex.
Åtgärden verkar i de flesta fall (alla?) ha varit att göra precis som du gjort, använda sig av tredjeparts-biblioteket DigestUtils från Apache Commons. :)
255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849