[Java] Probleme de comprehension avec l'API Cryptix (maj : resolu)

Probleme de comprehension avec l'API Cryptix (maj : resolu) [Java] - Java - Programmation

Marsh Posté le 20-08-2002 à 16:42:52    

J'ai un petit problème de compréhension sur la serialisation mais
surtout sur la récupération d'un objet, je crois que c le padding qui me pose problème. Si quelqu'un peut m'aider ou s'il veut des précisions y a pas de prob.
Merci


Message édité par Gwarm le 02-09-2002 à 12:00:51
Reply

Marsh Posté le 20-08-2002 à 16:42:52   

Reply

Marsh Posté le 20-08-2002 à 16:49:14    

[:wam]
 
 
c'est un peu court jeune homme :o
 
 
c'est quoi cryptix d'abord?

Reply

Marsh Posté le 20-08-2002 à 16:57:21    

justement l'avantage c de trouver quelqu'un qui l'a utilisé mais si ça t'interresse c une implementation des API de cryto Java et qui implémente RSA, MD5, SHA, AES (avec Rijndael).
Sinon ---> http://www.cryptix.org

Reply

Marsh Posté le 20-08-2002 à 16:57:42    

GWaRm a écrit a écrit :

justement l'avantage c de trouver quelqu'un qui l'a utilisé mais si ça t'interresse c une implementation des API de cryto Java et qui implémente RSA, MD5, SHA, AES (avec Rijndael).
Sinon ---> http://www.cryptix.org



vi ça m'interesse, justement :D
merci

Reply

Marsh Posté le 20-08-2002 à 17:00:09    

L'essentiel que j'ai oublié de dire est que je veux faire de la serialisation en utilisant le chiffrement AES.
 
Pour le stockage c bon mais c a la lecture que g des problemes.
 
Voilà le code que j'ai fait:

Code :
  1. import java.io.*;
  2. import cryptix.provider.cipher.Rijndael;
  3. import xjava.security.Cipher;
  4. import javax.crypto.*;
  5. import java.security.*;
  6. import cryptix.provider.key.*;
  7. public class Chiffrer {
  8.     public Chiffrer(String origine, String dest) throws java.io.FileNotFoundException, java.security.NoSuchAlgorithmException, java.io.IOException, java.security.KeyException, java.security.NoSuchProviderException{
  9. java.security.Security.addProvider(new cryptix.provider.Cryptix());
  10. xjava.security.Cipher c = xjava.security.Cipher.getInstance("Rijndael","Cryptix" );
  11. /* cle */
  12. SecureRandom random = new SecureRandom();
  13. cryptix.provider.key.RijndaelKeyGenerator keygen = new cryptix.provider.key.RijndaelKeyGenerator();
  14. keygen.initialize(random);
  15. Key key = keygen.generateKey();
  16. File keySave = new File("key.store" );
  17. FileOutputStream keyStoreOut = new FileOutputStream(keySave);
  18. ObjectOutputStream toKeyFile = new ObjectOutputStream(keyStoreOut);
  19. toKeyFile.writeObject(key);
  20. /* */
  21. /* */
  22. c.initEncrypt(key);
  23. File fichier = new File(dest);
  24. FileOutputStream foutput = new FileOutputStream(fichier);
  25. xjava.security.CipherOutputStream cout = new xjava.security.CipherOutputStream(foutput, c);
  26. ObjectOutputStream toFile = new ObjectOutputStream(cout);
  27. String test="Je fais de la cryptographie en Java";
  28. System.out.println("test "+test);
  29. toFile.writeObject(test);
  30. toFile.flush();
  31. cout.flush();
  32. foutput.flush();
  33.     }
  34.     public void dechiffrer(String origine) throws java.lang.ClassNotFoundException, java.io.FileNotFoundException, java.security.NoSuchAlgorithmException, java.io.IOException, java.security.KeyException, java.security.NoSuchProviderException{
  35. File keySave = new File("key.store" );
  36. FileInputStream keyStore = new FileInputStream(keySave);
  37. ObjectInputStream fFile = new ObjectInputStream(keyStore);
  38. Key key = (Key)fFile.readObject();
  39. File fichierorg = new File(origine);
  40. FileInputStream finput = new FileInputStream(fichierorg);
  41. int alire = finput.available();
  42. byte[] contenu = new byte[alire];
  43. System.out.println("long fichier "+alire);
  44. for (int i=0; i<alire ; i++){
  45.     contenu[i] = (byte)finput.read();
  46.     System.out.println((char)contenu[i]);
  47. }
  48. xjava.security.Cipher c = xjava.security.Cipher.getInstance("Rijndael","Cryptix" );
  49. c.initDecrypt(key);
  50. xjava.security.CipherInputStream cin = new xjava.security.CipherInputStream(finput, c);
  51. alire = cin.available();//.read(contenu, 0, contenu.length);
  52. byte[] data = new byte[alire];
  53. alire = c.getInputBlockSize();
  54. System.out.println(alire);
  55. data = c.doFinal(contenu);
  56. for (int i=0; i<data.length ; i++){
  57.     //data[i] = (byte)cin.read();
  58.     System.out.println((char)data[i]);
  59. }
  60. ByteArrayInputStream bIn = new ByteArrayInputStream(data);
  61. ObjectInputStream fromFile = new ObjectInputStream(bIn);
  62. String retest = (String)fromFile.readObject();
  63. System.out.println("retest "+retest);
  64.     }
  65.     public static void main(String[] args) throws java.lang.ClassNotFoundException, java.io.FileNotFoundException, java.security.NoSuchAlgorithmException, java.io.IOException, java.security.KeyException, java.security.NoSuchProviderException{
  66. Chiffrer essai = new Chiffrer(args[0], args[1]);
  67. essai.dechiffrer(args[1]);
  68.     }
  69. }


Message édité par Gwarm le 20-08-2002 à 17:02:43
Reply

Marsh Posté le 20-08-2002 à 17:18:09    

[:wam] ca c'est du throws !


Message édité par benou le 20-08-2002 à 17:18:24
Reply

Marsh Posté le 20-08-2002 à 17:18:50    

et c'est quoi ton problème exactement ?

Reply

Marsh Posté le 20-08-2002 à 17:23:18    

c juste un prog à part pour comprendre et après programmer le prog final.
 
Sinon mon problème c ça :


test Je fais de la cryptographie en Java
long fichier 32
Z
?
1
 
?
?
 
 
?
?
'
?
?
?
*
?
o
~
V
?
,
?
?
 
 
c
'
?
;
i
 
 
O
?
16
?
?
 
 
t
 
#
J
e
 
f
a
i
s
 
d
e
 
l
a
 
c
r
y
p
t
o
g
r
a
p
h
Exception in thread "main" java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2150)
        at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:2888)
        at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2689)
        at java.io.ObjectInputStream.readString(ObjectInputStream.java:1526)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1258)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:322)
        at Chiffrer.dechiffrer(Chiffrer.java:66)
        at Chiffrer.main(Chiffrer.java:72)

 
c qu'il s'arrete au 'h' et il ne me renvoie pas la suite
je pense qu'il ne me renvoie pas le dernier bloc car il a été complété par des caractere de bourrage (padding en anglais).
Si je mets la String "Je fais de la cryptograph" ça passe nickel.


Message édité par Gwarm le 20-08-2002 à 17:26:37
Reply

Marsh Posté le 20-08-2002 à 17:43:55    

pkoi tu ne fermes jamais tes fichiers ?
ca ne va surement pas régler ton problème mais ce sera déjà plus propre ...
 
ensuite, à quoi sert cette boucle :

System.out.println("long fichier "+alire);  
for (int i=0; i<alire ; i++){  
    contenu[i] = (byte)finput.read();  
    System.out.println((char)contenu[i]);  
}


 
tu commences déjà à vider ton inputStream .... je vois pas l'intérêt ...
 
en plus tu fais une 2e boucle quasiment identique apres ... enfin, je vois pas trop l'intérêt ...
 
sinon désolé, je connais pas l'API

Reply

Marsh Posté le 20-08-2002 à 18:15:02    

g fait quelques modifs d'ailleurs sur le vidage de l'InputStream
 
 

Code :
  1. File fichierorg = new File(origine);
  2. FileInputStream finput = new FileInputStream(fichierorg);
  3. int alire = finput.available();
  4. byte[] contenu = new byte[alire];
  5. System.out.println("long fichier "+alire);
  6. xjava.security.Cipher c = xjava.security.Cipher.getInstance("Rijndael","Cryptix" );
  7. c.initDecrypt(key);
  8. xjava.security.CipherInputStream cin = new xjava.security.CipherInputStream(finput, c);
  9. alire = cin.available();//.read(contenu, 0, contenu.length);
  10. byte[] data = new byte[alire];
  11. System.out.println(alire);
  12. for (int i=0; i<alire ; i++){
  13.     data[i] = (byte)cin.read();
  14.     System.out.println((char)data[i]);
  15. }
  16. ByteArrayInputStream bIn = new ByteArrayInputStream(data);
  17. ObjectInputStream oIn = new ObjectInputStream(bIn);
  18. String retest = (String)oIn.readObject();
  19. System.out.println("retest "+retest);
  20.     }

 
mais l'éxecution est tjs la même

Reply

Marsh Posté le 20-08-2002 à 18:15:02   

Reply

Marsh Posté le 20-08-2002 à 19:10:53    

pkoi tu ne fais pas simplement ca :  

Code :
  1. File fichierorg = new File(origine);
  2. FileInputStream finput = new FileInputStream(fichierorg);
  3. xjava.security.Cipher c = xjava.security.Cipher.getInstance("Rijndael","Cryptix" );
  4. c.initDecrypt(key);
  5. xjava.security.CipherInputStream cin = new xjava.security.CipherInputStream(finput, c);
  6. ObjectInputStream oIn = new ObjectInputStream(cIn);
  7. String retest = (String)oIn.readObject();
  8. System.out.println("retest "+retest);
  9.    }

 

Reply

Marsh Posté le 20-08-2002 à 19:27:32    

je dirais même plus :  

Code :
  1. import xjava.security.*;
  2. ...
  3. FileInputStream finput = new FileInputStream(origine); 
  4. Cipher c = Cipher.getInstance("Rijndael","Cryptix" ); 
  5. c.initDecrypt(key); 
  6. CipherInputStream cin = new CipherInputStream(finput, c); 
  7. ObjectInputStream oIn = new ObjectInputStream(cIn); 
  8. String retest = (String)oIn.readObject(); 
  9. System.out.println("retest "+retest);

 

Reply

Marsh Posté le 20-08-2002 à 20:03:44    

je suis en train de faire quelques test, et je pense que l'erreur ne vient pas du déchifrage mais du chiffrage : si tu fais un close tu te manges une xjava.security.IllegalBlockSizeException

Reply

Marsh Posté le 20-08-2002 à 20:10:06    

GWaRm a écrit a écrit :

justement l'avantage c de trouver quelqu'un qui l'a utilisé mais si ça t'interresse c une implementation des API de cryto Java et qui implémente RSA, MD5, SHA, AES (avec Rijndael).
Sinon ---> http://www.cryptix.org




 
Note à ts les programmeurs: le verbe "implanter" existe mais pas le verbe "implémenter" (qui est la version franciser du verbe anglais "to implement" ). Je me faisais avoir moi aussi jusqu'à ce qu'on m'en fasse la remarque...  

Reply

Marsh Posté le 20-08-2002 à 20:17:53    

j'ai essayé ton truc et je bloc. j'ai viré d=deux trois trucs qui me semblait inutile.
Pour moi, le problème vient du chiffrement qui ne se termine pas bien. La doc dit bien qu'il faut appeler le close de façon à ce que le padding se fasse en remplissant le dernier bloc, mais visiblement ca plante. Bizarre ...
Tu ne te rendait compte du problème qu'au déchifrement car tu ne fermait pas le stream ...
 
voici mon code :  

Code :
  1. package test.crypt;
  2.  
  3. import java.io.*;
  4. import cryptix.provider.cipher.Rijndael;
  5. import xjava.security.*;
  6. import java.security.*;
  7. import cryptix.provider.key.*;
  8.    
  9. public class Test {
  10.  
  11.    public static final String KEY_FILE = "key.store";
  12.    public static void chiffrer(String dest, String achiffrer) throws Exception {
  13.      
  14.       /* cle */
  15.       SecureRandom random = new SecureRandom();
  16.       RijndaelKeyGenerator keygen = new RijndaelKeyGenerator();
  17.       keygen.initialize(random);
  18.       Key key = keygen.generateKey();
  19.       ObjectOutputStream toKeyFile = new ObjectOutputStream(new FileOutputStream(KEY_FILE));
  20.       toKeyFile.writeObject(key);
  21.       toKeyFile.close();
  22.       /* */
  23.       Security.addProvider(new cryptix.provider.Cryptix());
  24.       Cipher c = Cipher.getInstance("Rijndael","Cryptix" );
  25.       c.initEncrypt(key);
  26.       CipherOutputStream cout = new CipherOutputStream(new FileOutputStream(dest), c);
  27.       ObjectOutputStream toFile = new ObjectOutputStream(cout);
  28.       System.out.println("chiffrement de '" + achiffrer + "'" );
  29.       toFile.writeObject(achiffrer);
  30.       toFile.flush();
  31.       cout.close(); // plante : xjava.security.IllegalBlockSizeException: Rijndael: Non-padding cipher in ENCRYPT state with an incomplete final block
  32.       toFile.close();     
  33.    }
  34.    public static void dechiffrer(String origine) throws Exception {
  35.       ObjectInputStream fFile = new ObjectInputStream(new FileInputStream(KEY_FILE));
  36.       Key key = (Key)fFile.readObject();
  37.       fFile.close();
  38.       FileInputStream finput = new FileInputStream(origine);
  39.       Cipher c = Cipher.getInstance("Rijndael","Cryptix" );
  40.       c.initDecrypt(key);
  41.       CipherInputStream cin = new CipherInputStream(finput, c);
  42.       ObjectInputStream fromFile = new ObjectInputStream(cin);
  43.       String retest = (String)fromFile.readObject();
  44.       fromFile.close();
  45.       System.out.println("dechifré : '" + retest + "'" );
  46.    }
  47.    
  48.    public static void main(String[] args) throws Exception {
  49.       chiffrer("chiffre.txt", "Je fais de la cryptographie en Java" );
  50.       dechiffrer("chiffre.txt" );
  51.    }
  52. }

Reply

Marsh Posté le 20-08-2002 à 20:19:35    

Lancelot** a écrit a écrit :

 
Note à ts les programmeurs: le verbe "implanter" existe mais pas le verbe "implémenter" (qui est la version franciser du verbe anglais "to implement" ). Je me faisais avoir moi aussi jusqu'à ce qu'on m'en fasse la remarque...  




ben oui mais implanter ca veut pas dire du tout la même chose.
donc, même s'il existe pas, moi je l'utilise !

Reply

Marsh Posté le 20-08-2002 à 20:19:49    

Lancelot** a écrit a écrit :

 
 
Note à ts les programmeurs: le verbe "implanter" existe mais pas le verbe "implémenter" (qui est la version franciser du verbe anglais "to implement" ). Je me faisais avoir moi aussi jusqu'à ce qu'on m'en fasse la remarque...  



le jour ou qqun me sort qu'il à passé sa journée à faire des implants, je me poserai de solides questions sur le boulot qu'il fait !

Reply

Marsh Posté le 20-08-2002 à 20:21:04    

--greg-- a écrit a écrit :

le jour ou qqun me sort qu'il à passé sa journée à faire des implants, je me poserai de solides questions sur le boulot qu'il fait !




:lol:

Reply

Marsh Posté le 21-08-2002 à 11:13:54    

--greg-- a écrit a écrit :

le jour ou qqun me sort qu'il à passé sa journée à faire des implants, je me poserai de solides questions sur le boulot qu'il fait !




 
c clair :lol:

Reply

Marsh Posté le 21-08-2002 à 11:15:26    

Lancelot** a écrit a écrit :

 
 
Note à ts les programmeurs: le verbe "implanter" existe mais pas le verbe "implémenter" (qui est la version franciser du verbe anglais "to implement" ). Je me faisais avoir moi aussi jusqu'à ce qu'on m'en fasse la remarque...  




 
je ne saurais vous répondre que par www.granddictionnaire.com avec recherche du mot implémenter et tout le monde sera d'accord :lol: du moins j'espere

Reply

Marsh Posté le 21-08-2002 à 11:18:51    

pas terrible leur définition
mais bref, pas de polémique

Reply

Marsh Posté le 21-08-2002 à 11:21:50    

benou a écrit a écrit :

j'ai essayé ton truc et je bloc. j'ai viré d=deux trois trucs qui me semblait inutile.
Pour moi, le problème vient du chiffrement qui ne se termine pas bien. La doc dit bien qu'il faut appeler le close de façon à ce que le padding se fasse en remplissant le dernier bloc, mais visiblement ca plante. Bizarre ...
Tu ne te rendait compte du problème qu'au déchifrement car tu ne fermait pas le stream ...
 




justement g suivi un peu ce que tu disais et j'en suis arrivé au même point que toi sauf que là il faut que je fasse ça :
 

Code :
  1. xjava.security.PaddingScheme pad = xjava.security.PaddingScheme.getInstance("Rijndael","Cryptix" );

 
et dans la doc c comme ça :
 


 
 
public static PaddingScheme getInstance(java.lang.String algorithm,
                                        java.lang.String provider)
                                 throws java.security.NoSuchAlgorithmException,
                                        java.security.NoSuchProviderException
 
Generates a PaddingScheme object implementing the specified algorithm, as supplied from the specified provider, if such an algorithm is available from the provider.  
 
See International JCE Standard Algorithm Names for a list of PaddingScheme algorithm names.

 
et que je je trouve le fameux "International JCE Standard Algorithm Names" qui n'existe pas dans la javadoc cryptix mais je cherche .... ;)

Reply

Marsh Posté le 21-08-2002 à 11:24:49    

--greg-- a écrit a écrit :

pas terrible leur définition
mais bref, pas de polémique




 
c bizarre leur 2 eme definition, ça semblerait donner raison à Lancelot :sarcastic:

Reply

Marsh Posté le 21-08-2002 à 12:06:24    

Ah il suffisait de chercher un petit peu.. :lol:
 
Voilà le code :
 

Code :
  1. import java.io.*;
  2. import cryptix.*;
  3. import cryptix.provider.*;
  4. import cryptix.provider.cipher.Rijndael;
  5. import xjava.security.*;
  6. import javax.crypto.*;
  7. import java.security.*;
  8. import cryptix.provider.key.*;
  9. public class Chiffrer {
  10.     public Chiffrer(String origine, String dest) throws java.io.FileNotFoundException, java.security.NoSuchAlgorithmException, java.io.IOException, java.security.KeyException, java.security.NoSuchProviderException{
  11. java.security.Security.addProvider(new cryptix.provider.Cryptix());
  12. xjava.security.Cipher corg = xjava.security.Cipher.getInstance("Rijndael","Cryptix" );
  13. // Il suffisait ici de spécifier quel algo à utiliser pour compléter les blocs incomplets
  14. String[] algos = xjava.security.IJCE.getAlgorithms(new cryptix.provider.Cryptix(),"PaddingScheme" );
  15. // IJCE permet de recup les noms des differents algos de differents type
  16. for(int i=0; i < algos.length; i++){
  17.     System.out.println(algos[i]);
  18. }
  19. xjava.security.PaddingScheme pad = xjava.security.PaddingScheme.getInstance("OneAndZeroes","Cryptix" );
  20. xjava.security.Cipher c = xjava.security.Cipher.getInstance(corg, new cryptix.provider.mode.CBC(), pad);
  21. /* cle */
  22. SecureRandom random = new SecureRandom();
  23. cryptix.provider.key.RijndaelKeyGenerator keygen = new cryptix.provider.key.RijndaelKeyGenerator();
  24. keygen.initialize(random);
  25. Key key = keygen.generateKey();
  26. File keySave = new File("key.store" );
  27. FileOutputStream keyStoreOut = new FileOutputStream(keySave);
  28. ObjectOutputStream toKeyFile = new ObjectOutputStream(keyStoreOut);
  29. toKeyFile.writeObject(key);
  30. /*  
  31.    En tout cas c terrible :
  32.    
  33.    ObjectOutputStream ---> CipherOutputStream  ---> FileOutputStream
  34.                            ^^^^^^^^^^^^^^^^^^
  35.                            Totalement autonome  
  36.  */
  37. c.initEncrypt(key);
  38. File fichier = new File(dest);
  39. FileOutputStream foutput = new FileOutputStream(fichier);
  40. xjava.security.CipherOutputStream cout = new xjava.security.CipherOutputStream(foutput, c);
  41. ObjectOutputStream toFile = new ObjectOutputStream(cout);
  42. String test="Je fais de la cryptographie en Java";
  43. System.out.println("test "+test);
  44. toFile.writeObject(test);
  45. toFile.close();
  46.     }
  47.     public void dechiffrer(String origine) throws java.lang.ClassNotFoundException, java.io.FileNotFoundException, java.security.NoSuchAlgorithmException, java.io.IOException, java.security.KeyException, java.security.NoSuchProviderException{
  48. File keySave = new File("key.store" );
  49. FileInputStream keyStore = new FileInputStream(keySave);
  50. ObjectInputStream fFile = new ObjectInputStream(keyStore);
  51. Key key = (Key)fFile.readObject();
  52. /*  
  53.    Dans l'autre sens :
  54.    
  55.    ObjectInputStream <--- CipherInputStream  <--- FileInputStream
  56.                           ^^^^^^^^^^^^^^^^^^
  57.                           reTotalement autonome  
  58.  */
  59. File fichierorg = new File(origine);
  60. FileInputStream finput = new FileInputStream(fichierorg);
  61. xjava.security.Cipher corg = xjava.security.Cipher.getInstance("Rijndael","Cryptix" );
  62. xjava.security.PaddingScheme pad = xjava.security.PaddingScheme.getInstance("OneAndZeroes","Cryptix" );
  63. xjava.security.Cipher c = xjava.security.Cipher.getInstance(corg, new cryptix.provider.mode.CBC(), pad);
  64. c.initDecrypt(key);
  65. xjava.security.CipherInputStream cin = new xjava.security.CipherInputStream(finput, c);
  66. ObjectInputStream oIn = new ObjectInputStream(cin);
  67. String retest = (String)oIn.readObject();
  68. System.out.println("retest "+retest);
  69.     }
  70.     public static void main(String[] args) throws java.lang.ClassNotFoundException, java.io.FileNotFoundException, java.security.NoSuchAlgorithmException, java.io.IOException, java.security.KeyException, java.security.NoSuchProviderException{
  71. Chiffrer essai = new Chiffrer(args[0], args[1]);
  72. essai.dechiffrer(args[1]);
  73.     }
  74. }

 
Il suffisait de spécifier un algo de Padding correct en tout de trouver quels algos faisaient du padding.
En tout je percois bien là la puissance de Java.
Voilà et puis merci


Message édité par Gwarm le 21-08-2002 à 12:09:03
Reply

Marsh Posté le 22-08-2002 à 11:19:26    

G un autre problème sur le principe de stockage des clés avec la classe KeyStore de l'API Java Standard.
Voici le code :
 

Code :
  1. import java.io.*;
  2. import cryptix.*;
  3. import cryptix.provider.*;
  4. import cryptix.provider.cipher.Rijndael;
  5. import xjava.security.*;
  6. import javax.crypto.*;
  7. import java.security.*;
  8. import cryptix.provider.key.*;
  9. public class GenKey{
  10.     static final char[] pass = {'r','o','o','t','p','a','s','s'};
  11.     public GenKey(String fichierCle) throws java.security.cert.CertificateException, java.security.NoSuchAlgorithmException, java.security.KeyStoreException, java.io.FileNotFoundException, java.security.NoSuchProviderException, java.io.IOException{
  12. java.security.Security.addProvider(new cryptix.provider.Cryptix());
  13. java.security.cert.Certificate [] cert = new java.security.cert.Certificate[1]; //aucun certificat nécessaire pour les clés secretes, uniquement pour les clés privées/publiques
  14. /* cle */
  15. SecureRandom random = new SecureRandom();
  16. cryptix.provider.key.RijndaelKeyGenerator keygen = new cryptix.provider.key.RijndaelKeyGenerator();
  17. keygen.initialize(random);
  18. Key key = keygen.generateKey(); // clé nouvellement générée
  19. KeyStore storekey = KeyStore.getInstance("JKS","SUN" );
  20. File fCle = new File(fichierCle);//fichier dans lequel je veux mettre ma clé
  21. FileOutputStream fout = new FileOutputStream(fCle);
  22. storekey.load(null,null); // permet l'initialisation qui est nécessaire pour la suite allez voir dans l'API cryptix pour des détails
  23. storekey.setKeyEntry("macle", key, pass, cert);// j'ajoute ma clé
  24. try{
  25.     storekey.store(fout, pass); // enregistrement dans le fichier
  26. }catch(NullPointerException np){
  27.     np.printStackTrace();
  28. }
  29. fout.close();
  30.     }
  31.     public static void main(String args[]) throws java.security.cert.CertificateException, java.security.KeyStoreException, java.io.FileNotFoundException, java.security.NoSuchProviderException, java.io.IOException, java.security.NoSuchAlgorithmException{
  32. GenKey essai = new GenKey(args[0]);
  33.     }
  34. }


et à l'éxecution j'ai :
 

java -cp .:../cryptix/cryptix32.jar GenKey essaicle                                                  11:10
java.lang.NullPointerException
        at sun.security.provider.JavaKeyStore.engineStore(JavaKeyStore.java:525)
        at java.security.KeyStore.store(KeyStore.java:620)
        at GenKey.<init>(GenKey.java:27)
        at GenKey.main(GenKey.java:34)

 
Le fichier existe bien car le "new File(fichierCle)" le créé.
En plus je ne sais pas quel est le pointeur qui est null.
Merci


Message édité par Gwarm le 22-08-2002 à 11:35:48
Reply

Marsh Posté le 22-08-2002 à 12:36:31    

Problème résolu:
Il suffisait d'aller sur le forum de Sun.
 
en fait il faut remplacer
 

KeyStore storekey = KeyStore.getInstance("JKS","SUN" );

qui ne gère que les clés asymétriques, par
 
 

KeyStore storekey = KeyStore.getInstance("JCEKS" );

qui apporte la gestion des clés symétriques JCEKS provient du SunJCE 1.2
 
-->  http://forum.java.sun.com/thread.j [...] read=14467

Reply

Marsh Posté le 22-08-2002 à 12:37:17    

[:xp1700]

Reply

Marsh Posté le 22-08-2002 à 12:42:09    

--greg-- a écrit a écrit :

[:xp1700]




 
merci pour tes félicitations quoique je sente une pointe d'ironie non ?? ;)

Reply

Marsh Posté le 22-08-2002 à 12:47:03    

GWaRm a écrit a écrit :

 
 
merci pour tes félicitations quoique je sente une pointe d'ironie non ?? ;)



non non jconnais pas le bon smiley, je voulais juste dire bravo :D et que c sympa d'avoir passé la soluce...

Reply

Marsh Posté le 22-08-2002 à 12:55:21    

ok ca roule

Reply

Marsh Posté le 29-08-2002 à 12:15:39    

g un autre problème !!
je veux utiliser un KeyStore (API Standard, java.security.KeyStore) et qd je lance un setKeyEntry(String alias, Key key, char[] password, Certificate[] chain) avec chaque caractere, issus d'une fonction de hachage, de password compris entre 1 et 248 (pour un mot de passe particulier) et il me renvoie KeystoreException : Password is not ASCII  :D :D :(  
L'ASCII n'est il pas compris entre 0 et 255 :??: :??:

Reply

Marsh Posté le 29-08-2002 à 14:17:15    

met un mot dez pass en dur pour voir si ca règle le problème ...

Reply

Marsh Posté le 29-08-2002 à 14:30:13    

benou a écrit a écrit :

met un mot dez pass en dur pour voir si ca règle le problème ...




ouais mais le problème c que le hachage par SHA-1 fait tomber dans des caracrtères non imprimables ou du genre "retour arriere", "return" bref un peu n'importe quoi comme code ASCII. Est ce que ça voudrait que setKeyEntry n'accepte que des caractères imprimables ??
Je vais faire le test avec "\n", "\t" et autres et je vous dirais

Reply

Marsh Posté le 29-08-2002 à 14:35:39    

J'ai essayé avec GenKey (cf plus haut) et j'ai utilisé le mot de passe  

Code :
  1. static final char[] pass = {'r','o','o','p','a','s','s','\n','\t'};

 et là il me jette l'exception KeyStoreException: Password is not ASCII, il faudrait qu'il précise (quand on l'utilise pour la première fois), KeyStoreException: Password is not printable ASCII.
vala


Message édité par Gwarm le 29-08-2002 à 14:38:02
Reply

Marsh Posté le 29-08-2002 à 18:29:35    

Problème résolu il suffit de faire :
 

Code :
  1. public static char[] hashToAscii(char[] pass){
  2. byte[] c = new byte[pass.length];
  3. for (int i=0; i<c.length; i++){
  4.     c[i]=(byte)pass[i];
  5. }
  6. char[] retour = ((String)cryptix.util.core.Hex.toString(c)).toCharArray();
  7. return(retour);
  8.     }

et encore un problème résolu !
PS : je me fais mes réponses tout seul même pas besoin d'aide :D :D

Reply

Marsh Posté le 29-08-2002 à 18:31:23    

:jap: Il manque plus qu'un "certified by benou"

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed