MD5- und SHA-Hashing in Java
MD5 ist einer der Algorithmen, die von Professor Ronaled Rivest an der MIT University entwickelt wurden (Rivest, 1994). Als die Arbeit darauf hindeutete, dass MD4 wahrscheinlich unsicher war, wurde MD5 entwickelt, um MD4 zu ersetzen. Die Schwachstellen von MD4 wurden später von Hans Dobbertin entdeckt.Dieses Tutorial erklärt, wie man einen String, häufig Passwörter aus Sicherheitsgründen, mit den beiden Hashing-Methoden MD5 und SHA-256 hasht. Hashing ermöglicht es Ihnen, nur in eine Richtung zu codieren, und dies ist sein größter Vorteil, so dass der Hash irreversibel ist, im Gegensatz zur Verschlüsselung, die einen Schlüssel für die Verschlüsselung und Entschlüsselung verwendet.
Die SHA-Hash-Funktionen wurden von der US-amerikanischen National Security Agency (NSA) entwickelt. SHA steht für Secure Hash Algorithm. Die drei SHA-Algorithmen sind unterschiedlich aufgebaut und unterscheiden sich durch SHA-0, SHA-1 und SHA-2. Die SHA-2-Familie verwendet einen identischen Algorithmus mit einer variablen Digest-Größe, der durch SHA-224, SHA-256, SHA-384 und SHA-512 unterschieden wird.
Hashing eines Strings mit MD5
In diesem Beispiel hashen wir ein Passwort mit dem MD5.import java.security.MessageDigest;Output:
public class md5_java
{
public static void main(String[] args)throws Exception
{
String password = "123456789";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte byteData[] = md.digest();
//Bit-Array in Hexadezimalformat konvertieren - Methode 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
System.out.println("Im Hexa-Format: " + sb.toString());
//bitarray in hexadezimales Format konvertieren - Methode 2
StringBuffer hexString = new StringBuffer();
für (int i=0; Ich< byteData.length; i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(hex);
}
System.out.println("Im Hexa-Format: " + hexString.toString());
}
}
Im Hexa-Format: 25f9e794323b453885f5181f1b624d0b
Im Hexa-Format: 25f9e794323b453885f5181f1b624d0b
Warum sollten wir SHA-256 anstelle von MD5 verwenden
Die Sicherheit von MD5 wurde ernsthaft gefährdet, ihre Schwächen wurden vor Ort ausgenutzt. Die Verwendung von MD5 für Passwörter ist eine schlechte Idee, da dies kein sicherer Weg ist. Sie sollten SHA immer für sensible Daten wie Benutzerpasswörter verwenden.import java.security.MessageDigest;Ausgabe:
public class sha_java
{
public static void main(String[] args)throws Exception
{
String password = "123456789";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(password.getBytes());
byte byteData[] = md.digest();
//Bit-Array in Hexadezimalformat konvertieren - Methode 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
System.out.println("Im Hexa-Format: " + sb.toString());
//bitarray in hexadezimales Format konvertieren - Methode 2
StringBuffer hexString = new StringBuffer();
für (int i=0; Ich< byteData.length; i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(hex);
}
System.out.println("Im Hexa-Format: " + hexString.toString());
}
}
Im Hexa-Format: 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225
Im Hexa-Format: 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225
Referenzen:
https:// en.wikipedia.org/wiki/MD5
https://en.wikipedia.org/wiki/Secure_Hash_Algorithm
Wie schwach ist MD5 als Passwort-Hashing-Funktion?