19. august 2007 - 14:04
Der er
5 kommentarer
PBE encryption med BC til java 1.6
Hej
Jeg er i færd med at lave et program som skal kunne tage en vilkårlig fil og kryptere den i henhold til en vilkårlig brugervalgt kode.
Jeg har dog nogle problemer med dette:
- Jeg får hele tiden en java.security.InvalidKeyException, hvilket kan skyldes jeg ikke har installeret JCE. Er dette virkelig nødvendigt når jeg bruger BC som provider?
- Jeg synes ikke jeg kan finde noget decideret kode eksempel hvor man kryptere en fil via PBE, kan dette virkelig passe?
- Sidst men ikke mindst, hvis jeg skal bruge JCE, er det så muligt at installere denne ved runtime, som f.eks. bouncy castle?
mvh.
Nick
22. august 2007 - 20:03
#2
Har jeg prøvet, desværre har en ændring ingen virkning :S
Har dog noget kode som jeg fik her inde for et stykke tid siden, tror faktisk det var af dig, som virker, bortset fra at koden som man kryptere efter skal være 16 byte lang.
koden ses her:
public class AES {
private static void crypt(int mode, String fromname, String toname, String key) throws Exception {
Cipher aes = Cipher.getInstance("AES");
aes.init(mode, new SecretKeySpec(key.getBytes("UTF-8"), "AES"));
InputStream is = new FileInputStream(fromname);
OutputStream os = new FileOutputStream(toname);
byte[] b = new byte[10000];
int n;
while((n = is.read(b)) >= 0) {
byte[] b2;
if(n < b.length) {
b2 = aes.doFinal(b, 0, n);
} else {
b2 = aes.update(b, 0, n);
}
os.write(b2, 0, b2.length);
System.out.println(n + " " + b2.length);
}
is.close();
os.close();
}
public static void encrypt(String fromname, String toname, String key) throws Exception {
crypt(Cipher.ENCRYPT_MODE, fromname, toname, key);
}
public static void decrypt(String fromname, String toname, String key) throws Exception {
crypt(Cipher.DECRYPT_MODE, fromname, toname, key);
}
public static void main(String[] args) throws Exception {
encrypt("/home/nick/z.1", "/home/nick/z.2", "Top hemmelig key");
decrypt("/home/nick/z.2", "/home/nick/z.1", "Top hemmelig key");
}
}
Er der en nem måde at sørge for en vilkårlig bruger indtastet kode altid kan laves om til en 16 byte lang kode?
22. august 2007 - 20:17
#3
Der er flere muligheder.
Et par tilfaeldige:
* lave en MD5 hash af den kode brugeren vaelger
* tag Java String hashCode af den kode som brugeren vaelger, brug den som seed for
Random og generere 16 bytes
22. august 2007 - 20:24
#4
Hvis du viser den PBE kode som ikke virker kan jeg maaske ogsaa finde en loesning til det,
men det er nemmest hvis du kan give et 25 linier eksempel som illusterer problemet.