java.security.InvalidKeyException: taille de clé illégale ou paramètres par défaut dans android
J'ai obtenu l'erreur suivante et je me suis un peu coincé:
Exception in thread "main"
java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1011)
at javax.crypto.Cipher.implInit(Cipher.java:786)
at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
at javax.crypto.Cipher.init(Cipher.java:1213)
at javax.crypto.Cipher.init(Cipher.java:1153)
at net.nakou.indie.wtext.engineClass.Session.cryptString(Session.java:52)
Je suis coincé parce que toutes les réponses que j'ai trouvé à parler de la Java Cryptography Extension (JCE) qui normalement être inclus dans le SDK android. Je pense donc que mon problème n'est pas celui-ci.
Je dois avoir oublié quelque chose, mais je ne trouve pas quoi. Peut-être que mon code est faux (c'est ma première approche de la cryptographie en Java, je ne suis pas un expert, et le code suivant est surtout une copie-colle des tutoriels).
- Je utiliser ce code de crypter et décrypter une Chaîne :
public String cryptString(String s) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException {
byte[] KeyData = this.cryptKey.getBytes();
SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, KS);
String ret = new String(cipher.doFinal(s.getBytes("UTF-8")));
return ret;
}
public String decryptString(byte[] s) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
byte[] KeyData = this.cryptKey.getBytes();
SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.DECRYPT_MODE, KS);
String ret = new String(cipher.doFinal(s));
return ret;
}
Et la clé suivante :
private String cryptKey = "qkjll5@2md3gs5Q@FDFqf";
Merci les gars.
source d'informationauteur Captain Nakou
Vous devez vous connecter pour publier un commentaire.
private String cryptKey = "qkjll5@2md3gs5Q@FDFqf";
Par défaut de Java prend en charge uniquement les 128 bits de chiffrement
Donc
cryptKey
ne peut pas dépasser 16 caractères.Si vous voulez dépasser de plus de 16 caractères, vous devez installer Java Cryptography Extension (JCE) Force Illimitée.
Pourquoi 128bits?
JDK par défaut prend en charge que le chiffrement à 128 bits touches parce que l'Américain restrictions. Donc, pour prendre en charge le chiffrement de 256 bits de long key, nous devons remplacer local_policy.jar et US_export_policy.pots de $JAVA_HOME/java-8-oracle/jre/lib/security dossier sinon il va donner java.de sécurité.InvalidKeyException: Illégal de la taille de la clé ou par défaut
Les deux vases et de conception détaillée peut comprendre à partir du lien:
easybook4u.com
Grâce,
Sulabh Jain
C'est un code unique solution. Pas besoin de télécharger ou de dégât avec des fichiers de configuration.
C'est une réflexion à partir de la solution, testée sur java 8
Appel de cette méthode une fois, au début de votre programme ou lorsque l'application est en cours de démarrage.
//Importations
//méthode
Il y a eu des mises à jour depuis Java 8/9
De départ avec Java 8 mise à Jour 151la Force Illimitée de la Compétence Politique est inclus avec Java 8, mais pas utilisé par défaut. Pour l'activer, vous devez modifier le java.dossier de la sécurité dans
<java_home>/jre/lib/security
(JDK) ou<java_home>/lib/security
(JRE). Décommenter (ou inclusion) de la lignecrypto.policy=unlimited
Assurez-vous de modifier le fichier en utilisant un éditeur exécuter en tant qu'administrateur.
Le changement de politique ne prend effet qu'après le redémarrage de la JVM
Avant Java 8 Update 151vous devez télécharger la JCE Force Illimitée de la Compétence de la Politique de fichiers et les remplacer.
Pour plus de détails, voir Comment installer Java Cryptography Extension (JCE) force illimitée de la compétence de la politique de fichiers