Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1326 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°198131
Gwarm
Posté le 20-08-2002 à 16:42:52  profilanswer
 

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
mood
Publicité
Posté le 20-08-2002 à 16:42:52  profilanswer
 

n°198136
--greg--
Posté le 20-08-2002 à 16:49:14  profilanswer
 

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

n°198141
Gwarm
Posté le 20-08-2002 à 16:57:21  profilanswer
 

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

n°198142
--greg--
Posté le 20-08-2002 à 16:57:42  profilanswer
 

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

n°198143
Gwarm
Posté le 20-08-2002 à 17:00:09  profilanswer
 

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
n°198152
benou
Posté le 20-08-2002 à 17:18:09  profilanswer
 

[:wam] ca c'est du throws !


Message édité par benou le 20-08-2002 à 17:18:24
n°198154
benou
Posté le 20-08-2002 à 17:18:50  profilanswer
 

et c'est quoi ton problème exactement ?

n°198156
Gwarm
Posté le 20-08-2002 à 17:23:18  profilanswer
 

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
n°198163
benou
Posté le 20-08-2002 à 17:43:55  profilanswer
 

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

n°198178
Gwarm
Posté le 20-08-2002 à 18:15:02  profilanswer
 

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

mood
Publicité
Posté le 20-08-2002 à 18:15:02  profilanswer
 

n°198188
benou
Posté le 20-08-2002 à 19:10:53  profilanswer
 

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.    }

 

n°198194
benou
Posté le 20-08-2002 à 19:27:32  profilanswer
 

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);

 

n°198202
benou
Posté le 20-08-2002 à 20:03:44  profilanswer
 

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

n°198205
Lancelot**
All I do is kiteboarding
Posté le 20-08-2002 à 20:10:06  profilanswer
 

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...  

n°198208
benou
Posté le 20-08-2002 à 20:17:53  profilanswer
 

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. }

n°198209
benou
Posté le 20-08-2002 à 20:19:35  profilanswer
 

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 !

n°198210
--greg--
Posté le 20-08-2002 à 20:19:49  profilanswer
 

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 !

n°198212
benou
Posté le 20-08-2002 à 20:21:04  profilanswer
 

--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:

n°198577
Gwarm
Posté le 21-08-2002 à 11:13:54  profilanswer
 

--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:

n°198581
Gwarm
Posté le 21-08-2002 à 11:15:26  profilanswer
 

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

n°198588
--greg--
Posté le 21-08-2002 à 11:18:51  profilanswer
 

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

n°198599
Gwarm
Posté le 21-08-2002 à 11:21:50  profilanswer
 

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 .... ;)

n°198608
Gwarm
Posté le 21-08-2002 à 11:24:49  profilanswer
 

--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:

n°198670
Gwarm
Posté le 21-08-2002 à 12:06:24  profilanswer
 

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
n°199622
Gwarm
Posté le 22-08-2002 à 11:19:26  profilanswer
 

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
n°199745
Gwarm
Posté le 22-08-2002 à 12:36:31  profilanswer
 

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

n°199747
--greg--
Posté le 22-08-2002 à 12:37:17  profilanswer
 

[:xp1700]

n°199749
Gwarm
Posté le 22-08-2002 à 12:42:09  profilanswer
 

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

[:xp1700]




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

n°199750
--greg--
Posté le 22-08-2002 à 12:47:03  profilanswer
 

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...

n°199755
Gwarm
Posté le 22-08-2002 à 12:55:21  profilanswer
 

ok ca roule

n°204517
Gwarm
Posté le 29-08-2002 à 12:15:39  profilanswer
 

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 :??: :??:

n°204575
benou
Posté le 29-08-2002 à 14:17:15  profilanswer
 

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

n°204592
Gwarm
Posté le 29-08-2002 à 14:30:13  profilanswer
 

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

n°204603
Gwarm
Posté le 29-08-2002 à 14:35:39  profilanswer
 

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
n°204869
Gwarm
Posté le 29-08-2002 à 18:29:35  profilanswer
 

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

n°204871
bobuse
Posté le 29-08-2002 à 18:31:23  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
[css] probleme avec 2 fichiers css sur la meme page [solved a la con]petit problème compteur temps et frames
[Java] Soucis de connexion Oracle 9.1 avec Weblogic 6.1[JS]comment mettre en variable '<script>...</script>' ?[resolu]
problème d'insertion[C] A votre bon coeur, aidez moi a parser ca (resolu)
[PHP & HTML] nouveau problème de syntaxe (résolu)problème ibdataset (delphi)
[java] "partager" un singleton ... euh... 
Plus de sujets relatifs à : [Java] Probleme de comprehension avec l'API Cryptix (maj : resolu)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR