博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java MD5 加密加强版
阅读量:6371 次
发布时间:2019-06-23

本文共 3850 字,大约阅读时间需要 12 分钟。

.

.

.

.

.

花了一个多小时的时间整理了原来一直使用的 MD5 加密类,这次新添加了 Salt 二次 MD5 加密模块。

核心的方法 cell32() 是很久以前在网上找来的,因为不记得原作者和出处了,所以没有贴出来版权,如果您是该方法的作者,请联系我,我将会及时附上版权。

由于本人水平有限,如果各位有更好的算法还请多多指教。

以下是完整代码:

1 package cn.lastcc.publicTools;   2   3 import java.security.MessageDigest;   4 import java.security.NoSuchAlgorithmException;   5   6 /**   7  * Salt MD5 加强模块
8 * 提供 16 位与 32 位 MD5 加密与其 Salt 加密功能

9 * 10 * Salt 加密方法调用:

11 * MD5 md5 = new MD5();
12 * String [] _tmp = md5.salt32("明文");
13 System.out.println(_tmp[0] + "\t" + _tmp[1]); 14 * 15 * @author Programer.Monkey
16 * Email: Programer.Monkey@gmail.com 17 * 18 * @version 11.12.30.1 19 * 20 */ 21 public class MD5 {
22 23 /** 24 * 随机密钥长度 25 */ 26 private static final int _KEYTLENGTH = 6; 27 28 public MD5() {
29 } 30 31 /** 32 * 生成随机密钥 33 * 34 * @param length 35 * 密钥长度 36 */ 37 private String getRandomKeyt(int length) throws Exception {
38 if (length < 1) 39 throw new Exception("密钥长度不能小于 1"); 40 String _keyt = ""; 41 for (int i = 0; i < length; i++) {
42 _keyt += (char) (33 + (int) (Math.random() * (126 - 33 + 1))); 43 } 44 return _keyt; 45 } 46 47 /** 48 * 32位标准 MD5 加密 49 * 50 * @param plainText 51 * 明文 52 * @return 密文
53 * 返回 Null 值则出现异常 54 */ 55 public String cell32(String plainText) {
56 try {
57 MessageDigest md = MessageDigest.getInstance("MD5"); 58 md.update(plainText.getBytes()); 59 byte b[] = md.digest(); 60 int i; 61 StringBuffer buf = new StringBuffer(""); 62 for (int offset = 0; offset < b.length; offset++) {
63 i = b[offset]; 64 if (i < 0) 65 i += 256; 66 if (i < 16) 67 buf.append("0"); 68 buf.append(Integer.toHexString(i)); 69 } 70 return buf.toString();// 32位的加密 71 72 } catch (NoSuchAlgorithmException e) {
73 e.printStackTrace(); 74 } 75 return null; 76 } 77 78 /** 79 * 32 位 salt 加密 80 * 81 * @param plainText 82 * 明文 83 * @return 索引 0 是密文,索引 1 是二次密钥 84 */ 85 public String[] salt32(String plainText) throws Exception {
86 return salt("cell32", plainText); 87 } 88 89 /** 90 * 16 位标准 MD5 加密 91 * 92 * @param plainText 93 * 明文 94 * @return 密文
95 * 返回 Null 值则出现异常 96 */ 97 public String cell16(String plainText) {
98 String result = cell32(plainText); 99 if (result == null) 100 return null; 101 return result.toString().substring(8, 24);// 16位的加密 102 } 103 104 /** 105 * 16 位 salt 加密 106 * 107 * @param plainText 108 * 明文 109 * @return 索引 0 是密文,索引 1 是二次密钥 110 */ 111 public String[] salt16(String plainText) throws Exception {
112 return salt("cell16", plainText); 113 } 114 115 /** 116 * 根据调用的方法名称执行不同的方法 117 * 118 * @param saltFunctionName 119 * 加密的方法名称 120 */ 121 private String[] salt(String saltFunctionName, String plainText) 122 throws Exception {
123 String _keyt = getRandomKeyt(_KEYTLENGTH); 124 return new String[] {(String) this.getClass().getMethod(saltFunctionName, Class.forName("java.lang.String")).invoke(this, (cell32(plainText) + _keyt)), _keyt }; 125 } 126 }

以下是调用 Salt 算法的方法:

1 String [] tmp = ((MD5)Class.forName("cn.lastcc.publicTools.MD5").newInstance()).salt32("abcdef");

转载地址:http://mhuqa.baihongyu.com/

你可能感兴趣的文章
环球花木网的目标就是致力于打造成为“园林相关行业的专业性门户网站
查看>>
《编写高质量代码:改善c程序代码的125个建议》—— 建议14-1:尽量避免对未知的有符号数执行位操作...
查看>>
《C语言编程魔法书:基于C11标准》——2.2 整数在计算机中的表示
查看>>
全球程序员编程水平排行榜TOP50,中国排名第一
查看>>
HDFS 进化,Hadoop 即将拥抱对象存储?
查看>>
Edge 浏览器奇葩 bug:“123456”打印成“114447”
查看>>
Sirius —— 开源版的 Siri ,由 Google 支持
查看>>
《OpenGL ES应用开发实践指南:Android卷》—— 2.7 小结
查看>>
《Windows Server 2012活动目录管理实践》——第 2 章 部署第一台域控制器2.1 案例任务...
查看>>
Java Date Time 教程-时间测量
查看>>
Selector.wakeup实现注记
查看>>
《Java EE 7精粹》—— 第1章 Java EE 1.1 简介
查看>>
《Exchange Server 2013 SP1管理实践》——导读
查看>>
syslog:类Unix系统常用的log服务
查看>>
使用Annotation设计持久层
查看>>
深入实践Spring Boot2.4.1 Neo4j依赖配置
查看>>
Zen Cart 如何添加地址栏上的小图标
查看>>
SecureCrt 连接Redhat linux
查看>>
[NHibernate]持久化类(Persistent Classes)
查看>>
如何在Hive中使用Json格式数据
查看>>