[Java][Security][MessageDigest] ArrayIndexOutofBoundException avec JRE5.0
Bonjour tout le monde,
Voici mon problème.
J'ai migré mes application web de IAS 10g release 1 vers la 10G release 3.
Je rencontre un problème lorsque je souhaite crée un checksum sur les fichiers uploadé sur les serveurs.
Ce code fonctionnait bien sur les précedentes version. Mais maintenant cette dernière release utilise la JRE 5.0.
Voici le bout de code qui foire
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public static String getChecksum(FileInputStream from) throws ChecksumException, IOException {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
int bufferSize = 64000;
byte[] bufferFile = new byte[bufferSize];
for (int i = 0; ; i++) {
int len = from.read(bufferFile);
md.update(bufferFile, 0, len);
if (len < 0)
break;
}
return (encodeMD5(md.digest()));
//return dig;
} catch (NoSuchAlgorithmException ns) {
throw new ChecksumException("Algorithm is not implemented");
}
}
public static String encodeMD5(byte[] binaryData) {
if (binaryData.length != 16) {
return "";
}
final char[] hexadecimal = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
char[] buffer = new char[32];
for (int i = 0; i < 16; i++) {
int low = (int) (binaryData[i] & 0x0f);
int high = (int) ((binaryData[i] & 0xf0) >> 4);
buffer[i * 2] = hexadecimal[high];
buffer[i * 2 + 1] = hexadecimal[low];
}
return new String(buffer);
} |
Je me ramasse comme exception un ArrayIndexOutOfBoundException à la ligne
Code:
md.update(bufferFile, 0, len);
Je me pose la question de savoir pourquoi cela ne fonctionne plus.
De plus cette méthode n'est même pas déprecated.
Voilà.
D'avance merci pour vos réponses.