MACTripleDES in Java

JavaNooby

Aktives Mitglied
Hallo,

Ich bin auf der Suche nach der Mac TripleDES Verschlüsselung in Java.

MACTripleDES-Klasse (System.Security.Cryptography)

Gibt es eine Implementierung in Java die äquivalent zu MACTripleDES.MACTripleDES(Byte()) ist?

Ich muss leider genau diesen Algorithmus verwenden da Passwörter mit diesem Algorithmus in einer Datenbank stehen und ich die mit Java vergleichen muss ;(


Beim googeln bin ich auf folgendes gestoßen:


Java:
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.spec.InvalidKeySpecException;

import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;

public class CryptoUtil {

private Cipher ecipher;
private Cipher dcipher;
private String algorithm = "DESede";
private String transformation = "DESede/CBC/PKCS5Padding";
private String keyPhrase = "123456789012345678901234"; //your keyphrase 24 bit
private SecretKey key;
private IvParameterSpec iv;

private static CryptoUtil cryptoUtil;

public static CryptoUtil getInstance() { //Singleton
if (cryptoUtil == null)
cryptoUtil = new CryptoUtil();

return cryptoUtil;
}

private CryptoUtil() {
try {
DESedeKeySpec keySpec = new DESedeKeySpec(keyPhrase.getBytes());
key = SecretKeyFactory.getInstance(algorithm).generateSecret(keySpec);
iv = new IvParameterSpec(new byte[8]);
ecipher = Cipher.getInstance(transformation);
dcipher = Cipher.getInstance(transformation);
ecipher.init(Cipher.ENCRYPT_MODE, key, iv);
dcipher.init(Cipher.DECRYPT_MODE, key, iv);

} catch (InvalidKeySpecException e) {
} catch (javax.crypto.NoSuchPaddingException e) {
} catch (java.security.NoSuchAlgorithmException e) {
} catch (java.security.InvalidKeyException e) {
} catch (InvalidAlgorithmParameterException e) {
}
}


@SuppressWarnings({"restriction", "hiding"})
public String encrypt(String str) {
try {
// Encode the string into bytes using utf-8
byte[] utf8 = str.getBytes("UTF8");

// Encrypt
byte[] enc = ecipher.doFinal(utf8);

// Encode bytes to base64 to get a string
return new sun.misc.BASE64Encoder().encode(enc);
} catch (javax.crypto.BadPaddingException e) {
} catch (IllegalBlockSizeException e) {
} catch (UnsupportedEncodingException e) {
} catch (java.io.IOException e) {
}
return null;
}

@SuppressWarnings("restriction")
public String decrypt(String str) {
try {
// Decode base64 to get bytes
byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);

// Decrypt
byte[] utf8 = dcipher.doFinal(dec);

// Decode using utf-8
return new String(utf8, "UTF8");
} catch (javax.crypto.BadPaddingException e) {
} catch (IllegalBlockSizeException e) {
} catch (UnsupportedEncodingException e) {
} catch (java.io.IOException e) {
}
return null;
}
}

nur wenn ich den Schlüssel entsprechend anpasse kommt leider ein anderes ergebniss raus ;(




Hat da jemand Erfahrung mit Triple DES in Java?



Vielen Dank für Antworten
 
Poste doch mal ein paar Testdaten, also Daten unverschlüsselt, verschlüsselt, und natürlich den verwendeten Schlüssel.
 
Ich poste die Ergebnisse mal besser als bytes sonst könnte es komisch aussehen.

Schlüssel:

Code:
"mein Schlüssel schlüssel"

zu Verschlüsselnder Text:

Code:
"nichtverschlüsselt"

Ergebnisse von .Net

Code:
131
152
56
62
168
18
104
109


Ergebnisse von java

Code:
-11
-83
-51
6
51
-26
45
-41
119
-14
-30
67
-7
22
96
-8
-44
-77
21
-109
21
-114
-6
72



irgendwie ziemlich merkwürdig das ganze ^^.

bei .net hab ich einfach ein neues Object
Code:
 New MACTripleDES
(mit dem byteArray des Schlüssels)
und dann
Code:
ComputeHash
mit dem ByteArray des unverschlüsselten textes ausgeführt.
 

Neue Themen


Zurück
Oben