OVH Cloud OVH Cloud

MD5sum en Java ?

7 réponses
Avatar
florentgart
Bonjour,

Je cherche une classe (ou une bibliotheque) me permettant de faire un
MD5sum sur un fichier...

sauriez-vous où je pourrais trouver mon bonheur ?

Florent.

7 réponses

Avatar
Marc Petit-Huguenin
florentgart wrote:
Bonjour,

Je cherche une classe (ou une bibliotheque) me permettant de faire un
MD5sum sur un fichier...

sauriez-vous où je pourrais trouver mon bonheur ?


Dans le JDK?

java.security.MessageDigest.getInstance("MD5");



Florent.



Avatar
FloG
Marc Petit-Huguenin wrote:

florentgart wrote:

Bonjour,

Je cherche une classe (ou une bibliotheque) me permettant de faire un
MD5sum sur un fichier...

sauriez-vous où je pourrais trouver mon bonheur ?



Dans le JDK?

java.security.MessageDigest.getInstance("MD5");


heu...
en fait, je ne connaos pas grand chose aux PKI,
mais je dois verifier l'integrité de fichier par leur MD5sum,
je chercherais plutôt un prog complet(ou un exemple) pour voir comment
c'est utilisé.
Mais merci, je vais deja regardé ca...

Florent


Avatar
Marc Petit-Huguenin
FloG wrote:
Marc Petit-Huguenin wrote:

florentgart wrote:

Bonjour,

Je cherche une classe (ou une bibliotheque) me permettant de faire un
MD5sum sur un fichier...

sauriez-vous où je pourrais trouver mon bonheur ?




Dans le JDK?

java.security.MessageDigest.getInstance("MD5");



heu...
en fait, je ne connaos pas grand chose aux PKI,
mais je dois verifier l'integrité de fichier par leur MD5sum,
je chercherais plutôt un prog complet(ou un exemple) pour voir comment
c'est utilisé.
Mais merci, je vais deja regardé ca...


FileInputStream is = new FileInputStream("myfile");
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1500];
for (int length = is.read(buffer); lenth != -1; length = is.read(buffer)) {
messageDigest.update(buffer, 0, length);
}
is.close();
byte[] digest = messageDigest.digest();
for (int i = 0; i < digest.length; i++) {
if (digest[i] & 0xFF < 16) {
System.out.print("0");
}
System.out.print(Integer.toHexString(digest[i] & 0xFF));
}
System.out.println();



Florent





Avatar
FloG
Marc Petit-Huguenin wrote:
FloG wrote:

Marc Petit-Huguenin wrote:

florentgart wrote:

Bonjour,

Je cherche une classe (ou une bibliotheque) me permettant de faire
un MD5sum sur un fichier...

sauriez-vous où je pourrais trouver mon bonheur ?





Dans le JDK?

java.security.MessageDigest.getInstance("MD5");




heu...
en fait, je ne connaos pas grand chose aux PKI,
mais je dois verifier l'integrité de fichier par leur MD5sum,
je chercherais plutôt un prog complet(ou un exemple) pour voir comment
c'est utilisé.
Mais merci, je vais deja regardé ca...



FileInputStream is = new FileInputStream("myfile");
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1500];
for (int length = is.read(buffer); lenth != -1; length = is.read(buffer)) {
messageDigest.update(buffer, 0, length);
}
is.close();
byte[] digest = messageDigest.digest();
for (int i = 0; i < digest.length; i++) {
if (digest[i] & 0xFF < 16) {
System.out.print("0");
}
System.out.print(Integer.toHexString(digest[i] & 0xFF));
}
System.out.println();



Florent



merci !





Avatar
FloG
FloG wrote:
Marc Petit-Huguenin wrote:

FloG wrote:

Marc Petit-Huguenin wrote:

florentgart wrote:

Bonjour,

Je cherche une classe (ou une bibliotheque) me permettant de faire
un MD5sum sur un fichier...

sauriez-vous où je pourrais trouver mon bonheur ?






Dans le JDK?

java.security.MessageDigest.getInstance("MD5");





heu...
en fait, je ne connaos pas grand chose aux PKI,
mais je dois verifier l'integrité de fichier par leur MD5sum,
je chercherais plutôt un prog complet(ou un exemple) pour voir
comment c'est utilisé.
Mais merci, je vais deja regardé ca...




FileInputStream is = new FileInputStream("myfile");
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1500];
for (int length = is.read(buffer); lenth != -1; length =
is.read(buffer)) {
messageDigest.update(buffer, 0, length);
}
is.close();
byte[] digest = messageDigest.digest();
for (int i = 0; i < digest.length; i++) {
if (digest[i] & 0xFF < 16) {
System.out.print("0");
}
System.out.print(Integer.toHexString(digest[i] & 0xFF));
}
System.out.println();



Florent



merci !


Voila, j'ai essayé et ca marche tres bien,

par contre je me suis permit juste 1 petites corrections (sans gravité,
c'est juste des fautes de frappes ;-) )
Le plus simple c'est que je le remettes en complet :

public MD5sum(String fileName) {
try {
FileInputStream is = new FileInputStream(fileName);
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[1500];
for (int length = is.read(buffer); length != -1; length =
is.read(buffer)) {
messageDigest.update(buffer, 0, length);
}
is.close();
byte[] digest = messageDigest.digest();
for (int i = 0; i < digest.length; i++) {
if ((digest[i] & 0xFF) < 16) {
System.out.print("0");
}
System.out.print(Integer.toHexString(digest[i] & 0xFF));
}
System.out.println();

} catch (Exception e) {System.err.println(e);}
}

voila

encore merci, :-)
Florent.





Avatar
Scooby-Ced

if (digest[i] & 0xFF < 16) {
System.out.print("0");
}


Pourquoi ce test ? Y-aurait'il des erreurs dans le calcul du digest ?

Scooby-Ced

Avatar
Marc Petit-Huguenin
Scooby-Ced wrote:


if (digest[i] & 0xFF < 16) {
System.out.print("0");
}



Pourquoi ce test ? Y-aurait'il des erreurs dans le calcul du digest ?


Non, c'est parce Integer.toHexString() retourne une chaine de un
caractere si le nombre a convertir est inferieur a 16: "0", "1", "2",
"3"..."E", "F", "10", "11". En ajoutant le test ci dessus, la lonheur
est toujours egale a deux, quelle que soit la valeur du byte.

BTW, comme disait un autre post, mon test est faux (j'ai ecris le code
directement, et j'oublie toujours que & n'est pas uniquement un
operateur bitwise en Java):

if ((digest[i] & 0xFF) < 16) {
System.out.print("0");
}



Scooby-Ced