[ 摘要 ] MD5 - 拿来校验软件篡改如何
2021-08-30 本文已影响0人
一个好汉
你好 哈希算法
哈希算法(Hash)又称摘要算法(Digest)
作用
对任意一组输入数据进行计算,得到一个固定长度的输出摘要
最重要的特点
- 相同的输入一定得到相同的输出
- 不同的输入大概率得到不同的输出
目的
为了验证原始数据是否被篡改
经典用途
- 校验登录密码
- 校验下载文件是否被篡改
常见算法
常用的哈希算法有:
算法 | 输出长度(位) | 输出长度(字节) |
---|---|---|
MD5 | 128 bits | 16 bytes |
SHA-1 | 160 bits | 20 bytes |
RipeMD-160 | 160 bits | 20 bytes |
SHA-256 | 256 bits | 32 bytes |
SHA-512 | 512 bits | 64 bytes |
md5 coding
public static void md5encode() throws NoSuchAlgorithmException {
// 创建一个MessageDigest实例:
MessageDigest md = MessageDigest.getInstance("MD5");
// 反复调用update输入数据:
md.update("Hello".getBytes(StandardCharsets.UTF_8));
md.update("World".getBytes(StandardCharsets.UTF_8));
byte[] result = md.digest(); // 16 bytes: 68e109f0f40ca72a15e05cc22786f8e6
System.out.println(new BigInteger(1, result).toString(16));
}
结果得到
68e109f0f40ca72a15e05cc22786f8e6
MD5只得16字节 输出长度较短,短时间内破解是可能的,目前已经不推荐使用
推荐使用同样是哈希算法的 SHA-1 SHA-256 SHA-512
上文的代码中只需要将"MD5" 换做其他算法 即可完成哈希算法的转换