2011-10-18 4 views
1
String key = "my_own_key_which_should_be_quite_long"; 
byte[] keyData = key.getBytes(); 
SecretKeySpec myKey = new SecretKeySpec(keyData, "Blowfish"); 
Cipher cipher = Cipher.getInstance("Blowfish"); 
cipher.init(Cipher.ENCRYPT_MODE, myKey); 
String input = "string to encrypt"; 
try { 
    byte[] encrypted = cipher.doFinal(input.getBytes()); 
    System.out.println(new String(encrypted)); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

javax.crypto.IllegalBlockSizeException: 7 octets de queue est lancée par la méthode doFinal. Quel est le problème? Quel est le plus intéressant - peu importe combien de temps la chaîne de clé est l'exception est toujours la même - 7 octets de fin.javax.crypto.IllegalBlockSizeException lors de l'utilisation Blowfish en java

+0

Mis à part le problème de la taille des blocs, vous * vraiment * ne doit pas utiliser l'encodage par défaut de plate-forme pour convertir la chaîne en un tableau d'octets, et vous ne devriez pas essayer pour convertir les données binaires opaques (le tableau d'octets chiffrés) en une chaîne comme celle-là - utilisez la base 64. –

+0

duplication possible de [Comment résoudre javax.crypto.IllegalBlockSizeException: les données ne sont pas alignées sur la taille du bloc] (http://stackoverflow.com/ questions/4062015/comment-résoudre-javax-crypto-illegalblocksizeexception-data-not-block-size-aligné) –

+0

OMFG, Jon Skeet a commenté ma question, maintenant ma vie est remplie de sens – Sergey

Répondre

1

Quoi qu'il en soit, en utilisant la bibliothèque Gnucrypto a résolu ce problème

Questions connexes