Я хочу использовать Java для получения контрольной суммы MD5 файла. Я был действительно удивлен, но я не смог найти ничего, что показывало бы, как получить контрольную сумму MD5 файла.
Как это делается?
Переведено автоматически
Ответ 1
Существует декоратор входного потока, java.security.DigestInputStream так что вы можете вычислять дайджест, используя входной поток, как обычно, вместо того, чтобы выполнять дополнительный переход по данным.
byte[] buffer = newbyte[1024]; MessageDigestcomplete= MessageDigest.getInstance("MD5"); int numRead;
do { numRead = fis.read(buffer); if (numRead > 0) { complete.update(buffer, 0, numRead); } } while (numRead != -1);
fis.close(); return complete.digest(); }
// see this How-to for a faster way to convert // a byte array to a HEX string publicstatic String getMD5Checksum(String filename)throws Exception { byte[] b = createChecksum(filename); Stringresult="";
for (int i=0; i < b.length; i++) { result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 ); } return result; }
Обратите внимание, что crc32 намного быстрее, чем md5, поэтому используйте crc32, если вам не нужна криптографически безопасная контрольная сумма. Обратите также внимание, что md5 не следует использовать для хранения паролей и т.п., поскольку его легко взломать, для паролей используйте bcrypt, scrypt или sha-256 вместо этого.
Для долгосрочной защиты с помощью хэшей схема подписи Merkle повышает безопасность, и Исследовательская группа по постквантовой криптографии, спонсируемая Европейской комиссией, рекомендовала использовать эту криптографию для долгосрочной защиты от квантовых компьютеров (ссылка).
Обратите внимание, что у crc32 частота столкновений выше, чем у других.