MD5,Message Digest Algorithm 5,是一种被广泛使用的信息摘要算法,可以将给定的任意长度数据通过一定的算法计算得出一个 128 位固定长度的散列值。
步骤(Groovy):
// 第一步,获取MessageDigest对象,参数为MD5表示这是一个MD5算法
md5 = ("MD5")
// 第二步,输入字符串数据,参数类型为byte[],所以需要转换
("byz".getBytes("UTF-8"))
()
// 第三步,计算MD5值,并转换成128位固定长度的数字
array = ("byz".getBytes("UTF-8"))
bigInt = new BigInteger(1, array)
//==> 176054896383790039236480003885242030640
// 第四步,将128位数字转换成较短的16位字符串
resultStr = (16)
//==> 8472f08ee0e742f3c2aebb2ab7389a30
注意:
第二步中,需要先获取一次(即先执行一次())跳过第一个值,再执行第三步(不知道为什么,执行的第一次与后面值不一致),跳过该步骤获得正确值。
第三步中,digest() 方法返回值是一个字节数组类型的 16 位长度的哈希值,通常,我们会转化为十六进制的 32 位长度的字符串来使用,可以利用 BigInteger 类来做这个转化。
最终方案(Scala):
import ;
import ;
import ;
def getMD5(str: String): String = {
// 第一步,获取MessageDigest对象,参数为MD5表示这是一个MD5算法
val md5 = ("MD5")
// 第二步跳过,输入源数据,参数类型为byte[]
//("aayz".getBytes("UTF-8"))
// 第三步,计算MD5值
val array = (("UTF-8"))
// 第四步,结果转换并返回
val bigInt = new BigInteger(1, array)
(16)// resultStr
}
函数计算结果:
getMD5("byz")
//String = 6c51ca0a3cfbcc1a8e240946076b93e0
getMD5("byz")
//String = 6c51ca0a3cfbcc1a8e240946076b93e0
getMD5("bbyz")
//String = 8472f08ee0e742f3c2aebb2ab7389a30
getMD5("bbyz")
//String = 8472f08ee0e742f3c2aebb2ab7389a30
参考版本(Java):
import ;
import ;
import ;
public class MD5 {
public static void main(String[] args) throws NoSuchAlgorithmException{
// 第一步,获取MessageDigest对象,参数为MD5字符串,表示这是一个MD5算法
MessageDigest md5 = ("MD5");
// 第二步,输入源数据,参数类型为byte[]
(new byte[] {'1', '2', '3'});
// 第三步,计算MD5值
// String resultArray = ().toString();
/*
* digest() 方法返回值是一个字节数组类型的 16 位长度的哈希值,通常,我们会
* 转化为十六进制的 32 位长度的字符串来使用,可以利用 BigInteger 类来做这个转化:
*/
BigInteger bigInt = new BigInteger(1, ());
String resultStr = (16);
("123的MD5为:");
(resultStr);
(());
}
}