Grundlagen: Verwendung der Messagedigest -Klasse
Um die MD5 -Verschlüsselung in Java zu vervollständigen, hilft Ihnen der größte Teil der MessagedIGest -Klasse, sie zu implementieren, und einige Codezeilen sind ausreichend:
/** * Verschlüsseln Sie den String md5 * * @param str * @return */import java.security.messagedigest; public static String getMd5 (String Str) {try {// generieren Sie eine md5 -Verschlüsselungscalculation Digest Messaged Messaged.getIGest.GetinStance ("Md5"); // Berechnen Sie die MD5 -Funktion md.update (str.getBytes ()); // digest () bestimmt schließlich, dass der MD5 -Hash -Wert zurücksetzt und der Rückgabewert 8 als Zeichenfolge beträgt. Da der MD5-Hash-Wert ein 16-Bit-Hex-Wert ist, ist es tatsächlich ein 8-Bit-Zeichen // BigInteger-Funktion wandelt eine 8-Bit-Zeichenfolge in einen 16-Bit-Hex-Wert um und repräsentiert sie als Zeichenfolge. Ruft den Hash -Wert in Form einer String zurück, die neue BigInteger (1, Md.Digest ()) zurückzusetzen. ToString (16); } catch (Ausnahme E) {neue SpeedException werfen ("MD5 -Verschlüsselungsfehler ist aufgetreten"); }} Fortgeschrittene: Verschlüsselung und Entschlüsselung
Java implementiert MD5 -Verschlüsselungs- und Entschlüsselungsklassen mit Testklassen, siehe Code für Details.
MD5 -Verschlüsselungs- und Entschlüsselungsklasse - MYMD5UTIL, der Code ist wie folgt
Paket com.zyg.security.md5; import Java.io.unsupportedenCodingException; Import Java.security Hex_nums_str = "0123456789abcdef"; private statische Finale Integer Salt_Length = 12; / ** * In Byte -Array umwandeln * @param hex * @return * / public static byte [] hexstringtobyte (String hex) {int len = (hex.length () / 2); byte [] result = new byte [len]; char [] hexchars = hex.toarArray (); für (int i = 0; i <len; i ++) {int pos = i * 2; result [i] = (byte) (hex_nums_str.indexof (hexchars [pos]) << 4 | hex_nums_str.indexof (hexchars [pos + 1]); } Rückgabeergebnis; } / ** * das angegebene Byte -Array in eine hex -Zeichenfolge umwandeln für (int i = 0; i <B.Length; i ++) {String hex = Integer.tohexString (b [i] & 0xff); if (hex.length () == 1) {hex = '0' + hex; } hexstring.Append (hex.touppercase ()); } return hexstring.toString (); } /** * Überprüfen Sie, ob das Passwort legal ist byte [] pwdindb = hexstringtObyte (passwordindb); // das Salzvariable Byte [] Salt = New Byte [Salt_length] deklarieren; // das Salz aus dem im Datenbanksystem gespeicherten Byte -Array extrahieren. // Erstellen Sie das Messagedigest Messagedigest MessagedIGest.getInstance ("Md5"); // die Salzdaten in das Message Digest Object md.update (Salz) pausieren; // Die Kennwortdaten an das Message Digest-Objekt MD.Update (password.getBytes ("utf-8") übergeben; // generieren Sie den Meldung Digest des Eingabekennwort -Byte [] digest = md.Digest (); // eine Variable deklarieren, die die Nachricht Digest des Kennworts im Datenbank -Byte [] digestindb = new byte [pwdindb.length - Salt_Length] speichert; // Erhalten Sie die Nachricht Digest des Kennworts im Datenbanksystem.ArrayCopy (pwdindb, salt_length, digestindb, 0, digestindb.length); // Vergleichen Sie, ob die Meldungsdigest basierend auf dem Eingabekennwort mit der Meldungsdigest in der Datenbank übereinstimmt, wenn (arrays.equals (digest, digestIndb)) {// Passwort korrekt zurückgibt, korrekt für das Passwort -Matching Meldung zurückgeben. } else {// Passwort In Falsche gibt die Nichtübereinstimmung der Kennwort -Mismpatch -Nachricht false zurück; } } /** * Get the encrypted hexadecimal password* @param password * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static String getEncryptedPwd(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException { //Declare the encrypted password array variable byte[] pwd = null; // Zufallszahlengenerator Securerandom Random = new Securerandom (); // das Salzarray -Variable -Byte [] salz = new Byte [Salt_Length] deklarieren; // die Zufallszahl in die Salzvariable zufällig eingeben. // das Message Digest Object MessagedIGest md = null deklarieren; // Erstellen Sie die Nachricht Digest md = MessagedIGest.getInstance ("Md5"); // die Salzdaten in das Message Digest Object md.update (Salz) pausieren; // Übergeben Sie die Daten des Kennworts an das Message Digest Object md.update (password.getBytes ("utf-8")); // Holen Sie sich das Byte -Array des Nachrichten Digest Byte [] digest = md.Digest (); // Da Salz im Byte -Array des Passworts gespeichert werden soll, fügen Sie die Bytelänge des Salzes pwd = neu hinzu. // Kopieren Sie die Bytes des Salzes in die ersten 12 Bytes des generierten verschlüsselten Passwort -Byte -Arrays, um das Salz beim Überprüfen des Passwortsystems herauszuholen. // Die Nachricht Digest in die Bytes im verschlüsselten Passwort -Byte -Array ab dem 13. Byte -System kopieren. // Das Passwort verschlüsselte Byte -Array -Format in ein Hexadezimal -String -Format -Kennwort -Rückgabe -BytetohexString (PWD) konvertieren; }}Testklasse - Client, der Code lautet wie folgt:
Paket com.zyg.security.md5; import Java.io.unsupportedenCodingException; Import Java.Security.NosuchalgorithmException; Import Java.util.hashMap; public static void main (String [] args) {String username = "zyg"; String password = "123"; RegisterUser (Benutzername, Passwort); Benutzername = "Changong"; Passwort = "456"; RegisterUser (Benutzername, Passwort); String loginuserid = "zyg"; String pwd = "1232"; try {if (loginvalid (loginUerId, pwd)) {System.out.println ("Willkommen bei Login !!!"); } else {System.out.println ("Passwortfehler, bitte wieder eingeben !!!"); }} catch (NoSuchalgorithmException e) {// Todo automatisch erzeugte Catch-Block e.printstacktrace (); } catch (unportedenCodingException e) {// todo automatisch generierter Catch-Block e.printstacktrace (); }} / ** * Registrierter Benutzer * * @param userername * @param password * / public static void RegisterUser (String -Benutzername, String -Passwort) {String verschlüsseltPWD = null; Versuchen Sie {EncryptedPWD = MYMD5UTIL.GeteCryptedPWD (Passwort); user.put (Benutzername, verschlüsseltPWD); } catch (NoSuchalgorithmException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } catch (unportedenCodingException e) {// todo automatisch generierter Catch-Block e.printstacktrace (); }} / ** * Überprüfungs -Login * * @param userername * @param password * @return * @throws unupportEneNexception * @throw nosuchalgorithmException * / public static boolean loginvalid (String username, String Passwort) nouchalgorithMexception, unsUpportedEcodidexception {String pwdintenexception {String {String {String {String {String {String {String {String {String {-Intintexception {String {String { (String) users.get (Benutzername); if (null! } else {System.out.println ("Dieser Benutzer existiert nicht!!"); false zurückgeben; }}}PS: Hier sind zwei weitere MD5 -Verschlüsselungstools für Sie. Interessierte Freunde können sich darauf beziehen:
MD5 Online -Verschlüsselungstool:
http://tools.vevb.com/password/createmd5password
Online MD5/Hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160-Verschlüsselungsinstrument:
http://tools.vevb.com/password/hash_md5_sha