Aus Copyrightgründen kann man die Verschlüsselung von Knuddels ja auch nicht nehmen.
Die MD5 Verschlüsselung war aus dem Inet (ich speicher bei mir die Passwörter gesalted im MD5 Format, deswegen mit in der Klasse drinne). Das Hashing ist an Knuddels angelehnt, kann aber natürlich frei genutzt werden.
|
Java-Quelltext
|
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package eu.knuddelz.net.Security;
/**
*
* @author KAPS
*/
public class Password {
public static String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) { }
return null;
}
public static String hash(String md5, String salt) {
Integer worth = 0;
for(int i=0; i<md5.length();++i) {
char c = md5.charAt(i);
switch(c%5) {
case 0:
worth = worth ^ (3<<(i%16));
break;
case 1:
worth += (int)Math.pow(c, c);
break;
case 2:
worth = worth | c<<(i%8);
break;
case 3:
worth = worth*c;
break;
default:
worth++;
}
}
for(int i=0; i<salt.length();++i) {
char c = salt.charAt(i);
switch(c%5) {
case 0:
worth = worth ^ (3<<(i%16));
break;
case 1:
worth += (int)Math.pow(c, c);
break;
case 2:
worth = worth | c<<(i%8);
break;
case 3:
worth = worth*c;
break;
default:
worth++;
}
}
worth = worth%100000;
return worth.toString();
}
}
|
Der Salt hier kann genutzt werden um den dynamischen Passwortkey zu nutzen.