Mam za zadanie napisać program szyfrujący wykorzystujący 3DES. Z dużą pomocą Internetu udało mi się napisać coś takiego, chciałbym jednak prosić, aby ktoś sprawdził, czy mój program na pewno działa tak jak powinien, w sensie czy spełnia założenia 3DES?
Poza tym, jak mogę sprawdzić ile bitów ma generowany klucz?
public class TripleDes {
private static final String UNICODE_FORMAT = "UTF8";
public static final String DESEDE_ENCRYPTION_SCHEME = "DESede";
private KeySpec keySpec;
KeyGenerator keygen;
private Cipher cipher;
byte[] arrayBytes;
private String myEncryptionScheme;
SecretKey klucz;
public TripleDes() throws Exception {
myEncryptionScheme = DESEDE_ENCRYPTION_SCHEME;
keygen = KeyGenerator.getInstance("DESede");
cipher = Cipher.getInstance(myEncryptionScheme);
klucz = keygen.generateKey();
arrayBytes = klucz.getEncoded();
keySpec = new DESedeKeySpec(arrayBytes);
String s = new String(arrayBytes);
}
public String zaszyfruj(String niezaszyfrowanyTekst) {
String zaszyfrowanyTekst = null;
try {
//inicjalizacja silnika algorytmu szyfrujacego
cipher.init(Cipher.ENCRYPT_MODE, klucz);
byte[] zwyklyTekst = niezaszyfrowanyTekst.getBytes(UNICODE_FORMAT);
byte[] zakodowanyTekst = cipher.doFinal(zwyklyTekst);
zaszyfrowanyTekst = new String(Base64.encodeBase64(zakodowanyTekst));
} catch (Exception e) {
e.printStackTrace();
}
return zaszyfrowanyTekst;
}
public String odszyfruj(String zaszyfrowanyTekst) {
String odszyfrowanyTekst = null;
try {
cipher.init(Cipher.DECRYPT_MODE, klucz);
byte[] zakodowanyTekst = Base64.decodeBase64(zaszyfrowanyTekst);
byte[] zwyklyTekst = cipher.doFinal(zakodowanyTekst);
odszyfrowanyTekst = new String(zwyklyTekst);
} catch (Exception e) {
e.printStackTrace();
}
return odszyfrowanyTekst;
}
public static void main(String[] args) throws Exception {
TripleDes tripleDes = new TripleDes();
String wiadomosc = "Jakas tam wiadomosc";
String zaszyfrowany = tripleDes.zaszyfruj(wiadomosc);
String odszyfrowany = tripleDes.odszyfruj(zaszyfrowany);
System.out.println("Tekst do zakodowania: " + wiadomosc);
System.out.println("Zaszyfrowany tekst: " + zaszyfrowany);
System.out.println("Odszyfrowany tekst: " + odszyfrowany);
}
}