口令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();

}

JustHost:俄罗斯/新西伯利亚vps,512MB内存/5GB空间/不限流量/200Mbps/KVM/自由更换IP,$1.57/月

justhost怎么样?justhost是一家俄罗斯主机商,2006年成立,提供各种主机服务,vps基于kvm,有HDD和SSD硬盘两种,特色是200Mbps不限流量(之前是100Mbps,现在升级为200Mbps)。下面是HDD硬盘的KVM VPS,性价比最高,此外还有SSD硬盘的KVM VPS,价格略高。支持Paypal付款。国内建议选择新西伯利亚或者莫斯科DataLine。支持Paypal付...

陆零(¥25)云端专用的高性能、安全隔离的物理集群六折起

陆零网络是正规的IDC公司,我们采用优质硬件和网络,为客户提供高速、稳定的云计算服务。公司拥有一流的技术团队,提供7*24小时1对1售后服务,让您无后顾之忧。我们目前提供高防空间、云服务器、物理服务器,高防IP等众多产品,为您提供轻松上云、安全防护 为核心数据库、关键应用系统、高性能计算业务提供云端专用的高性能、安全隔离的物理集群。分钟级交付周期助你的企业获得实时的业务响应能力,助力核心业务飞速成...

UCloud云服务器低至年59元

最近我们是不是在讨论较多的是关于K12教育的问题,培训机构由于资本的介入确实让家长更为焦虑,对于这样的整改我们还是很支持的。实际上,在云服务器市场中,我们也看到内卷和资本的力量,各大云服务商竞争也是相当激烈,更不用说个人和小公司服务商日子确实不好过。今天有看到UCloud发布的夏季促销活动,直接提前和双十一保价挂钩。这就是说,人家直接在暑假的时候就上线双十一的活动。早年的双十一活动会提前一周到十天...

md5解密为你推荐
免费卡巴斯基杀毒软件怎样免费用卡巴斯基杀毒软件?手动挡和自动挡哪个好自动挡手动挡哪个好?等额本息等额本金哪个好到底是等额本息好还是等额本金好?手机炒股软件哪个好手机股票交易哪个平台最好播放器哪个好安卓手机视频播放器哪个好点qq空间登录不上qq空间登不进去 怎么办上海dns服务器地址谁知道上海移动无线网卡的DNS服务器地址360云盘登录360云盘登陆账号360云盘转存百度云盘怎样将360云盘中文件快速转存到百度云盘广东联通网络传真现在好多网络传真的公司,都有好的线路是联通的,电信的,是不是走的每一条线路,价格都不一样呢?
购买域名和空间 香港新世界电讯 申请空间 hnyd seednet me空间社区 微软服务器操作系统 吉林铁通 个人免费主页 789 免费的asp空间 lamp什么意思 lamp架构 cdn网站加速 杭州电信宽带优惠 windowsserver2008r2 weblogic部署 crontab 主机响 sockscap下载 更多