口令MD5加解密及测试方法

md5解密  时间:2021-01-31  阅读:()

Java实现MD5加密解密类收藏

转载请注明:来自http://b lo g.c sdn.net/M_ChangGong/作者:张燕广Java实现MD5加密以及解密类 附带测试类具体见代码。

MD5加密解密类——MyMD5Util,代码如下view plaincopy to clipboardprint?

01.p ackage c om.zyg.s ecurity.md5;

02.

03.imp ort java.io.UnsupportedEnc odingExc eption;

04.import java.security.Mes sageDigest;

05.imp ort java.s ecurity.No SuchAlgorithmExc eption;

06.import java.security.S ecureRandom;

07.import java.util.Arrays;

08.

09.public class MyMD5Util {

10.

11. private static final StringHEX_NUMS_S TR="0123456789ABC DEF";

12. private static final Integer SALT_LENGTH=12;

13.

14. /**

15. *将16进制字符串转换成字节数组

16. *@p aram hex

17. *@return

18. */

19. public static byte[]hexStringToByte(String hex) {

20. int len=(hex.le ngth() /2);

21. byte[]result=new byte[len];

22. c har[]hexChars=hex.toCharArray();

23. for(int i=0; i<len; i++) {

24. intpos=i*2;

25. re s ult[i] = (b yte)(HEX_NUMS_STR.ind exO f(he xChars[p os])<<4

26. |HEX_NUMS_S TR.indexO f(hexChars[p os+1]));

27. }

28. return result;

29. }

30.

31.

32. /**

33. *将指定byte数组转换成16进制字符串

34. *@param b

35. *@return

36. */

37. public static String byteToHexString(byte[]b) {

38. S tring Buffer hexS tr in g=new S trin gBuffer();

39. for(int i=0; i<b.length; i++) {

40. S tring hex=Inte ger.to HexS tring(b[i]&0xF F);

41. if(he x.leng th()==1) {

42. hex='0'+hex;

43. }

44. hexS trin g.ap p end(hex.to Up p erC as e());

45. }

46. return hexString.to String();

47. }

48.

49. /**

50. *验证口令是否合法

51. *@param password

52. *@param passwordInDb

53. *@return

54. *@throws No S uc hAlgorithmExc ep tion

55. *@throws UnsupportedEnc odingExc eption

56. */

57. public static boolean validPassword(String password, Stringp as s wo rdInDb)

58. throws NoSuchAlgorithmException,UnsupportedEnc odingExc eption{

59. //将16进制字符串格式口令转换成字节数组

60. b yte[]p wdInDb=hexS tringTo Byte(p as s wo rdInDb);

61. //声明盐变量

62. b yte[] s alt=new b yte[S ALT_LENGTH];

63. //将盐从数据库中保存的口令字节数组中提取出来

64. S ys tem.arrayc o p y(p wd InDb,0, s alt,0,S ALT_LENG T H);

65. //创建消息摘要对象

66. Mess ageD ig es t md=Mess ageD iges t.getIns tanc e("MD 5");

67. //将盐数据传入消息摘要对象

68. md.up d ate(s alt);

69. //将口令的数据传给消息摘要对象

70. md.up date(p as s wo rd.getBytes("UTF-8"));

71. //生成输入口令的消息摘要

72. byte[]digest=md.digest();

73. //声明一个保存数据库中口令消息摘要的变量

74. byte[] digestInDb = new byte[pwdInDb.length -S ALT_LENG T H];

75. //取得数据库中口令的消息摘要

76. S ys tem.arrayc o p y(p wd InDb, S ALT_LENG T H, d ige s tInDb,0,dige s tInDb.leng th);

77. //比较根据输入口令生成的消息摘要和数据库中消息摘要是否相同

78. if(Arr ays.equals(diges t,diges tInDb)) {

79. //口令正确返回口令匹配消息

80. return true;

81. } els e {

82. //口令不正确返回口令不匹配消息

83. return fals e;

84. }

85. }

86.

87.

88. /**

89. *获得加密后的16进制形式口令

90. *@param password

91. *@return

92. *@throws No S uc hAlgorithmExc ep tion

93. *@throws UnsupportedEnc odingExc eption

94. */

95. public static String getEncryptedPwd(String password)

96. throws NoSuchAlgorithmException,UnsupportedEnc odingExc eption{

97. //声明加密后的口令数组变量

98. b yte[]p wd=nul l;

99. //随机数生成器

100. S ecureRandom random=new S ecureRandom();

101. //声明盐数组变量

102. b yte[] s alt=new b yte[S ALT_LENG T H];

103. //将随机数放入盐变量中

104. rand o m.nextByt e s(s alt);

105.

106. //声明消息摘要对象

107. Mes sageDigest md=null;

108. //创建消息摘要

109. md=Mes s ageDig es t.getIns tanc e("MD5");

110. //将盐数据传入消息摘要对象

111. md.up d ate(s alt);

112. //将口令的数据传给消息摘要对象

113. md.update(p ass word.getByt es("UTF-8"));

114. //获得消息摘要的字节数组

115. byte[]digest=md.digest();

116.

117. //因为要在口令的字节数组中存放盐所以加上盐的字节长度

118. p wd=new b yte[diges t.length+S ALT_LENG TH];

119. //将盐的字节拷贝到生成的加密口令字节数组的前12个字节 以便在验证口令时取出盐

120. S ys tem.arrayc o p y(s alt,0,p wd,0,S ALT_LENG T H);

121. //将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节

122. S ys tem.arrayc op y(diges t, 0, p wd, S ALT_LENGTH,diges t.length);

123. //将字节数组格式加密后的口令转化为16进制字符串格式的口令

124. return byteToHexS tring(pwd);

125. }

126.}p ackage com.zyg.s ecurity.md 5;imp ort java.io.Unsupp ortedEnco dingExc eption;import java.security.Mes sageDigest;import java.s ecurity.No SuchAlgorithmExc eption;import java.security.S ecureRandom;

import java.util.Arrays;public class MyMD5Util {private static final StringHEX_NUMS_S TR="0123456789ABC DEF";private static final Integer SALT_LENGTH=12;

/**

*将16进制字符串转换成字节数组

*@p aram hex

*@return

*/public static byte[]hexStringToByte(String hex) {int len=(hex.le ngth() /2);byte[]result=new byte[len];c har[]hexChars=hex.toCharArray();for(int i=0; i<len; i++) {int pos=i*2;result[i]=(byte) (HEX_NUMS_STR.indexO f(he xChars[p o s])<<4

|HEX_NUMS_STR.indexO f(hexChars[p o s +

1]));

}return result;

}

/**

*将指定byte数组转换成16进制字符串

*@param b

*@return

*/public static String byteToHexString(byte[]b) {S tringBuffer hexS tring=new S tringBuffer();for(int i=0; i<b.length; i++) {

S tring h ex=Intege r.to HexS tring(b[i]&0xF F);if(hex.le ngth()==1) {hex='0'+hex;

}hexS tr ing.ap p end(hex.to Up p erC as e());

}return hexS tring.to S tring();

}

HostKvm 黑色星期五香港服务器终身六折 其余机房八折

HostKvm商家我们也不用多介绍,这个服务商来自国内某商家,旗下也有多个品牌的,每次看到推送信息都是几个服务商品牌一起推送的。当然商家还是比较稳定的,商家品牌比较多,这也是国内商家一贯的做法,这样广撒网。这次看到黑五优惠活动发布了,针对其主打的香港云服务器提供终身6折的优惠,其余机房服务器依然是8折,另还有充值50美元赠送5美元的优惠活动,有需要的可以看看。HostKvm是一个创建于2013年的...

ftlcloud9元/月,美国云服务器,1G内存/1核/20g硬盘/10M带宽不限/10G防御

ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。活动地址:https://www.ftlcloud.com...

百驰云(19/月),高性能服务器,香港三网CN2 2核2G 10M 国内、香港、美国、日本、VPS、物理机、站群全站7.5折,无理由退换,IP免费换!

百驰云成立于2017年,是一家新国人IDC商家,且正规持证IDC/ISP/CDN,商家主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、云虚拟主机、专属服务器托管、带宽租用等产品和服务。百驰云提供源自大陆、香港、韩国和美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以及国际顶尖品牌硬件。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端...

md5解密为你推荐
燃气热水器和电热水器哪个好燃气热水器和电热水器哪个好985和211哪个好985和211哪个强?具体分析点。网络机顶盒哪个好现在用什么网络机顶盒最好?51个人空间登录51个人空间怎么申请???qq空间登录界面怎样进入自己qq空间dns服务器未响应电脑网络连接不到,DNS服务器未响应是什么意思?360云盘官网360云盘手机下载官网下载安装到手最便宜的手机最便宜最好的手机是什么牌子的最便宜的宝马最便宜的宝马大概多少钱?最便宜的敞篷车最便宜的敞篷车是多少钱
个人注册域名 hostmaster cve-2014-6271 mach5 linkcloud 12306抢票攻略 网站监控 云鼎网络 京东商城0元抢购 免空 腾讯云分析 爱奇艺vip免费试用7天 metalink web服务器安全 linux使用教程 台湾google 重庆电信服务器托管 qq金券 wordpress中文主题 免费个人主页 更多