,,Java实现MD5加密的方式与实例代码

,,Java实现MD5加密的方式与实例代码

MD5加密是一种常用的加密方法,常用于保存用户密码和密钥信息。那么它是什么,它有什么好处呢?它将在应用程序开发中得到广泛应用。

1、什么是MD5

MD5加密的整个过程就是Message-Digest Algorithm 5(Message-Digest Algorithm)对信息进行抽象,然后通过一定的位运算得到加密的MD5字符串。

比如我们要加密一篇文章,那么我们会从每一段或者每一行中随机取一个字,对这些字进行计数,然后通过一定的运算得到一条定长的MD5加密报文。因此,很难反向破解。

2、MD5有哪些特点

MD5加密的特点如下:

1.用于数据、字符串等。由于要加密的长度不同,它都可以返回一个固定长度的MD5加密字符串。(通常是32位十六进制字符串);

2.它的加密过程几乎是不可逆的,除非维护一个巨大的键值数据库用于冲突破解,否则几乎无法解密。

3.操作简单,可以多种方式实现,通过一定的处理方法可以避免碰撞算法的破解。

4.对于固定字符串。数字等。MD5加密的字符串是固定的,也就是说不管MD5加密多少次,得到的结果都是一样的。

3.MD5加密的Java实现

事不宜迟,直接进入代码:

公共静态字符串getMD5String(String str) {

尝试{

//生成MD5加密的计算摘要

message digest MD=message digest . getinstance(' MD5 ');

//计算md5函数

MD . update(str . getbytes());

//digest()最终确定返回md5哈希值,返回值为8位字符串。因为md5哈希值是16位十六进制值,所以它实际上是8位字符。

//BigInteger函数将8位字符串转换为16位十六进制值,用字符串表示;获取字符串形式的哈希值。

//一个字节是八位二进制,即两个十六进制字符(2的8次方等于16的2次方)

返回新的BigInteger(1,md.digest())。toString(16);

} catch(异常e) {

e . printstacktrace();

返回null

}

}

以上是使用Java自带的MessageDigest类实现的最简单的MD5加密方法。没有对加密过程进行任何处理。下面相对更复杂。

包com . mmall . util;

导入Java . security . message digest;

/**

*由dt创建

*/

公共类MD5Util {

//这里主要遍历8个字节,转换成16位字符,即0-F

私有静态字符串byteArrayToHexString(字节b[]) {

string buffer resultSb=new string buffer();

for(int I=0;长度;我)

resultsb . append(byteToHexString(b[I]));

返回resultsb . tostring();

}

//这里,对于单个字节,256的字节被16拆分成d1和d2

私有静态字符串byteToHexString(字节b) {

int n=b;

如果(n ^ 0)

n=256

int D1=n/16;

int d2=n % 16

返回hex digits[D1]hex digits[D2];

}

/**

* return capital MD5

*

* @param原点

* @param charsetname

* @返回

*/

私有静态字符串MD5Encode(String origin,String charsetname) {

String resultString=null

尝试{

resultString=新字符串(origin);

message digest MD=message digest . getinstance(' MD5 ');

if (charsetname==null || ' '。等于(字符集名))

resultString=byteArrayToHexString(MD . digest(resultString . getbytes()));

其他

resultString=byteArrayToHexString(MD . digest(resultString . getbytes(charset name)));

} catch(异常异常){

}

返回resultstring . toupper case();

}

公共静态字符串MD5EncodeUtf8(字符串来源){

origin=origin properties util . getproperty(' password . salt ',' ');

返回MD5Encode(origin,' utf-8 ');

}

私有静态最终字符串hexDigits[]={'0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',

6 ',' 7 ',' 8 ',' 9 ',' a ',' b ',' c ',' d ',' e ',' f ' };

}

//这段代码中还引入了propertyseutil . getproperty(' password . salt ','')来获得一个额外的字符串,保证了碰撞算法的命中率更低,在第三方MD5平台上很难被搜索到。

password . salt=23543 fggeelysdafaqj 23 ou 89 zxcj @ # $ @ # $ # @ KJdjklj;D./dSF。

还有一个更详细的版本,对妇女和儿童有更详细的评论:

公共静态字符串stringMD5(字符串输入){

尝试{

//获取一个MD5转换器(如果您希望将SHA1参数更改为“SHA1”)

message digest message digest=message digest . getinstance(' MD5 ');

//输入字符串被转换为字节数组

byte[]inputByteArray=input . getbytes();

//inputByteArray是转换输入字符串得到的字节数组。

message digest . update(inputByteArray);

//转换并返回结果,也是16个元素的字节数组

byte[]result bytearray=message digest . digest();

//字符数组被转换成字符串并返回

返回byteArrayToHex(resultByteArray);

} catch(nosuch algorithm exception e){

返回null

}

}

下面的函数用于用十六进制字符串替换字节数组。

公共静态字符串byteArrayToHex(byte[]byteArray){

//首先初始化一个字符数组来存储每个十六进制字符。

char[] hexDigits={'0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' A ',' B ',' C ',' D ',' E ',' F ' };

//new一个字符数组,用来组成结果字符串(解释:一个字节是八位二进制,也就是两个十六进制字符(2的八次方等于16的二次方))

char[]resultCharArray=new char[bytearray . length * 2];

//遍历字节数组,通过位运算(位运算效率高),转换成字符,放入字符数组。

int index=0;

for(字节b:字节数组){

resultCharArray[index]=hex digits[b 40xf];

resultCharArray[index]=hex digits[b0xf];

}

//字符数组被组合成一个字符串并返回

返回新字符串(resultCharArray);

}

关于Java MD5加密的方法和示例代码的文章到此结束。有关Java MD5的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: