SHA-512 Verschlüsselung mit Java

Seit Java Version 1.4 gibt es den SHA-512 Hash-Algorithmus im java.security-Package. Damit ist es möglich, sehr sichere Verschlüsselungen mit 512-Bit zu erzeugen. Wie man einen SHA-512 Hashwert bildet, zeigt der folgende Code:

Beispiel:

CreatePassword.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
 
public class CreatePassword
{
    public static void main(String argv[])
    {
        try
        {
            String strTest = EncryptPassword.SHA512("Das hier ist eine SHA-Verschlüsselung mit 512 Bit.");
            System.out.println(strTest);    // 128 Zeichen
            String strTest2 = EncryptPassword.SHA512("...und das hier auch!");
            System.out.println(strTest2);   // 128 Zeichen
        }
        catch (NoSuchAlgorithmException ex)
        {
            System.out.println(ex.getMessage());
        }
        catch (UnsupportedEncodingException ex)
        {
            System.out.println(ex.getMessage());
        }
    }
}

EncryptPassword.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class EncryptPassword
{
    private static String convertToHex(byte[] data)
    {
        StringBuffer buf = new StringBuffer();
 
        for (int i = 0; i < data.length; i++)
        {
            int halfbyte = (data[i] >>> 4) & 0x0F;
            int two_halfs = 0;
            do
            {
                if ((0 <= halfbyte) && (halfbyte <= 9))
                    buf.append((char) ('0' + halfbyte));
                else
                    buf.append((char) ('a' + (halfbyte - 10)));
                halfbyte = data[i] & 0x0F;
            }
            while(two_halfs++ < 1);
        }
        return buf.toString();
    }
 
    public static String SHA512(String text)
    throws NoSuchAlgorithmException, UnsupportedEncodingException
    {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA-512");
        byte[] sha1hash = new byte[40];
        md.update(text.getBytes("UTF-8"), 0, text.length());
        sha1hash = md.digest();
        return convertToHex(sha1hash);
    }
}

7 Gedanken zu „SHA-512 Verschlüsselung mit Java“

  1. statt convertToHex reich auch einfach bigint


    BigInteger number = new BigInteger(1,hash);
    return number.toString(16);

  2. Das klingt jetzt ein wenig neunmal klug aber…
    SHA-512 ist ein Hash-Algorithmus, kein Verschlüsselungsalgorithmus. Es ist nämlich unmöglich, aus dem Hash das Original wiederherzustellen, was bei einer Verschlüsselung aber (mit dem richtigen Schlüssel) möglich sein sollte. Verschlüsselungen sind über die Crypto-Api (angesprochen über javax.crypto.Cipher) möglich.
    siehe da:
    http://download.oracle.com/javase/1.4.2/docs/api/javax/crypto/Cipher.html

  3. Du hast ein kleines Problem… (warum nur haben Java-Programmierer immer so ein Problem mit Encodings ?)

    md.update(text.getBytes(„UTF-8“), 0, text.length());

    Wenn Dein Text Zeichen enthält, die in UTF-8 durch mehrere bytes dargestellt werden, hashst Du einen Teil des Passwords nicht …

    einfacher und korrekter:
    md.update(text.getBytes(„UTF-8“));

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.