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

  FORUM HardWare.fr
  Programmation
  Java

  MessageDigest ????

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MessageDigest ????

n°314925
arghbis
salops de dauphins
Posté le 21-02-2003 à 13:50:15  profilanswer
 

Salut tout le monde, c'est moi que revoilou, avec une question certainement très simple de Java!
je n'arrive pas à utiliser la classe MessageDigest du package security de Java (je veux avoir un MD5sum en sortie)! quelqu'un aurait un exemple??
 
merci

mood
Publicité
Posté le 21-02-2003 à 13:50:15  profilanswer
 

n°314934
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 21-02-2003 à 13:57:34  profilanswer
 

Ui. C'est assez facile une fois que t'as bien tout compris comment marche le bordel. J'ai fait une classe de générateur d'UID unique se basant sur MD5 y a genre un an.
Concernant MD5 et MessageDigest, ça marche comme ça :
* récupére la bonne instance de codage. Ici, MD5. Donc : MessageDigest md = MessageDigest.getInstance("MD5" );
* ensuite, t'updates ton MessageDigest avec le tableau de bytes que tu veux encoder : md.update(byteArray);
* tu récupères les bytes encodés avec digest : byte[] encodedBytes = md.digest();
 
Et voilou.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°314937
arghbis
salops de dauphins
Posté le 21-02-2003 à 14:00:56  profilanswer
 

donc, admettons que j'ai une variable String, il faut que je la cast en byteArray puis que je fasse ce que tu dis??
 
ensuite, faut que je fasse un toString sur le byte[] de résultat pour récupérer la chaine correspondante, c ça?

n°314955
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 21-02-2003 à 14:15:06  profilanswer
 

arghbis a écrit :

donc, admettons que j'ai une variable String, il faut que je la cast en byteArray puis que je fasse ce que tu dis??
 
ensuite, faut que je fasse un toString sur le byte[] de résultat pour récupérer la chaine correspondante, c ça?


 
Non, pas tout à fait. Déjà, tu peux pas faire de cast en tableau de bytes sur une String, ça a pas de sens. Mais tu as la joulie méthode getBytes() de la classe String qui va t'aider à récupérer ta chaîne sous forme de byte[] :)
Ensuite, une fois que t'as fait le digest(), tu récupères des bytes dont la valeur est comprise entre -128 et +127 (ou -127 et +128, j'sais jamais [:ddr555]), bref c'est la chiotte pour rebalancer le tout dans une String.
Donc pour que ça marche, faut faire un ET logique avec 11111111 sur chaque byte du tableau :
int b = encBytes[i] & 255;
Tu peux ensuite caster le int en char : char c = (char) b; (ça peut se faire directement dans la ligne du dessus mais j'ai décomposé pour que ça soit plus compréhensible)
Et t'ajoutes ton char dans un StringBuffer, pour finir par retourner tonStringBuffer.toString().


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°314960
arghbis
salops de dauphins
Posté le 21-02-2003 à 14:18:52  profilanswer
 

[:spikler]  
 
m'enfin quand même, c bien compliqué le java je trouve! pour faire un truc tout simple, t'as besoin de dix types différents, et pour les convertir c galère!!
tant qu'à faire que de faire une classe MessageDigest, ils auraient pu en faire une qui prend et ressort un String nom??

n°314964
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 21-02-2003 à 14:23:31  profilanswer
 

Bin non ! Une classe MessageDigest a pour but d'encoder des données de taille variable en des données de taille fixe :

Citation :

This MessageDigest class provides applications the functionality of a message digest algorithm, such as MD5 or SHA. Message digests are secure one-way hash functions that take arbitrary-sized data and output a fixed-length hash value.


 
Il est donc normal que ça soit des bytes et non des String. Tu peux facilement extraire des bytes d'une String et inversement ; c'est juste que dans le cas présent, tu dois appliquer un ET logique pour avoir des unsigned bytes et obtenir des caractères lisibles. Ce souci vient du fait que tu as besoin de spécialiser les fonctionnalités de MessageDigest pour tes propres besoins.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°314967
arghbis
salops de dauphins
Posté le 21-02-2003 à 14:28:08  profilanswer
 

je ne dis pas le contraire, mais en tant que programmeur débutant en java et fainéant, je trouve ça bizarre. Tu devrais pourvoir envoyer un String et ressortir un String, sans te préoccuper de le transformer en byteArray. Ce devrait être le constructeur qui devrait s'en charger, de manière transparente!
il me semblait que justement, avoir des contructeurs acceptant des variables différentes en nombre et en type était un des avantages de java!

n°314972
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 21-02-2003 à 14:32:47  profilanswer
 

arghbis a écrit :

je ne dis pas le contraire, mais en tant que programmeur débutant en java et fainéant, je trouve ça bizarre. Tu devrais pourvoir envoyer un String et ressortir un String, sans te préoccuper de le transformer en byteArray. Ce devrait être le constructeur qui devrait s'en charger, de manière transparente!
il me semblait que justement, avoir des contructeurs acceptant des variables différentes en nombre et en type était un des avantages de java!


 
Oui mais mets-toi aussi à la place du développeur de la classe MessageDigest. Il ne sait pas quel type de données peut lui être envoyé. Y a des gens qui vont vouloir encoder des chaînes mais d'autres qui vont vouloir encoder des fichiers ou que sais-je. Il ne va pas se taper toutes les surcharges de constructeurs possibles et imaginables uniquement pour le confort du développeur en face. Surtout que les manips que je t'ai données sont loin d'être fastidieuses : 3 méthodes de la classe à appeler (dont un constructeur), une boucle for, un ET logique et c'est fini. En 10 lignes c'est torché, donc bon faut quand même pas se plaindre :sarcastic:


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°314980
arghbis
salops de dauphins
Posté le 21-02-2003 à 14:37:17  profilanswer
 

Non, je ne me plaint pas vraiment, je constate, c tout!
je prend pour référence le langage que je connais le mieux : Perl (et on ne se moque pas hein!  :non: )
Ben pour faire un MD5, t'as une méthode si c un fichier, une méthode ci c une chaine de caractères, une méthode si c un tableau et pis c tout! et en sortie, tu as les trois méthodes équivalentes. Donc, j'estime que c plus simple et plus complet, maintenant je me trompe peut-être et je changerais peut-être d'avis qd je connaitrais mieux java (pour l'instant comme tu peux t'en rendre compte c un peu difficile pour moi)!
 
merci pour tout!

n°314999
benou
Posté le 21-02-2003 à 14:55:19  profilanswer
 

le principe de Java c'est que c'est du Composant. Tu as des Objets, et tu les assembles pour arriver à résoudre ton problème.
 
C'est peut être un peu plus chiant à mettre en place mais c'est beaucoup plus ouvert !

mood
Publicité
Posté le 21-02-2003 à 14:55:19  profilanswer
 

n°315022
arghbis
salops de dauphins
Posté le 21-02-2003 à 15:15:57  profilanswer
 

tant que j'y suis à poser des questions à la con, vous n'auriez pas un site ou une doc où ils filent un exemple pour les classes?? paske ça serait bien pratique qd même!!

n°315024
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 21-02-2003 à 15:17:18  profilanswer
 

arghbis a écrit :

tant que j'y suis à poser des questions à la con, vous n'auriez pas un site ou une doc où ils filent un exemple pour les classes?? paske ça serait bien pratique qd même!!


 
Doc générale : http://java.sun.com/j2se/1.4/docs/api/index.html
Sinon, pour MessageDigest j'ai pas. Mais un coup de [:google] devrait le faire.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°315026
arghbis
salops de dauphins
Posté le 21-02-2003 à 15:20:16  profilanswer
 

ouaip, je l'ai déjà celle là, je te remercie. pour  MessageDigest c bon, chuis pas un boulay fini qd même!!  :whistle:  
non, c t pour la suite, pour éviter d'embêter le monde qd j'ai une question simple!!
 
 
 [:spikler]


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

  MessageDigest ????

 

Sujets relatifs
Plus de sujets relatifs à : MessageDigest ????


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)