M
MannMitBart
Gast
Hallo erstmal
Ich habe mir die gnu-crypto Bibliothek runtergeladen um eine kleine Cryptography-Klasse für mein Projekt zu erstellen.
Die Hash-Funktionen sind eigentlich nicht so schwer zu verstehen und waren nicht das Problem, allerdings versuche ich jetzt gerade auch eine Methode zum ver-/entschlüssen zu implementieren, an der ich nicht weiterkomme.
Mein Problem ist wohl eher auf verständnismäßiger Ebene.
Momentan wird soweit ich das verstanden habe nur ein einzige Block vom Input verschlüsselt und zurückgegeben.
Was ich haben möchte: input rein und das Ganze verschlüsselt wieder raus.
Könnt ihr mir eventuell weiterhelfen (hab irgendwie eine Denkblockade und ich sitze an diesem Problem wirklich schon peinlich lange...)?
(Google liefert mir immer nur JavaDocs... vielleicht frag ich auch nur das falsche :-X)
Code I use:
Ich habe mir die gnu-crypto Bibliothek runtergeladen um eine kleine Cryptography-Klasse für mein Projekt zu erstellen.
Die Hash-Funktionen sind eigentlich nicht so schwer zu verstehen und waren nicht das Problem, allerdings versuche ich jetzt gerade auch eine Methode zum ver-/entschlüssen zu implementieren, an der ich nicht weiterkomme.
Mein Problem ist wohl eher auf verständnismäßiger Ebene.
Momentan wird soweit ich das verstanden habe nur ein einzige Block vom Input verschlüsselt und zurückgegeben.
Was ich haben möchte: input rein und das Ganze verschlüsselt wieder raus.
Könnt ihr mir eventuell weiterhelfen (hab irgendwie eine Denkblockade und ich sitze an diesem Problem wirklich schon peinlich lange...)?
(Google liefert mir immer nur JavaDocs... vielleicht frag ich auch nur das falsche :-X)
Code I use:
Java:
import java.security.InvalidKeyException;
import gnu.crypto.cipher.Serpent;
import gnu.crypto.hash.Sha512;
import gnu.crypto.hash.Whirlpool;
public class CryptographyModule{
public static void main(String[] args) throws InvalidKeyException{
String a="hallo du grausame welt der cryptographie :-O";
byte[] key=get256BitHashFrom512BitHash(getWhirlpoolHash("passForHash".getBytes()));
byte[] encrypted=encryptSerpent(a.getBytes(), key);
System.out.println(new String(encrypted));
}
public static byte[] encryptSerpent(byte[] input, byte[] key) throws InvalidKeyException{
Serpent serpent=new Serpent();
byte[] output=new byte[serpent.defaultBlockSize()];
Object sessionKey=serpent.makeKey(key, serpent.defaultBlockSize());
serpent.encrypt(input, 0, output, 0, sessionKey, serpent.defaultBlockSize());
return output;
}
public static byte[] getWhirlpoolHash(byte[] input){
Whirlpool whirlpool=new Whirlpool();
whirlpool.update(input, 0, input.length);
return whirlpool.digest();
}
public static byte[] getSha512Hash(byte[] input){
Sha512 sha512=new Sha512();
sha512.update(input, 0, input.length);
return sha512.digest();
}
public static byte[] get256BitHashFrom512BitHash(byte[] input){
byte[] output=new byte[32];
for(int i=0;i<32;i++){
output[i]=input[i*2];
}
return output;
}
}