Java加密算法研究
作者:网络转载 发布时间:[ 2014/7/18 14:55:32 ] 推荐标签:Java 软件开发
可变MD5加密(Java实现)
可变在这里含义很简单,是终的加密结果是可变的,而非必需按标准MD5加密实现。Java类库security中的MessageDigest类提供了MD5加密的支持,实现起来非常方便。为了实现更多效果,我们可以如下设计MD5工具类。
|
import java.security.MessageDigest;
/**
* 标准MD5加密方法,使用java类库的security包的MessageDigest类处理
*/
public class MD5 {
/**
* 获得MD5加密密码的方法
*/
public static String getMD5ofStr(String origString) {
String origMD5 = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
// md5.update(origString.getBytes());
byte[] result = md5.digest(origString.getBytes());
origMD5 = byteArray2HexStr(result);
// if ("123".equals(origString)) {
// System.out.println(new String(result));
// System.out.println(new BigInteger(result).toString(16));
// }
} catch (Exception e) {
e.printStackTrace();
}
return origMD5;
}
/**
* 处理字节数组得到MD5密码的方法
*/
private static String byteArray2HexStr(byte[] bs) {
StringBuffer sb = new StringBuffer();
for (byte b : bs) {
sb.append(byte2HexStr(b));
}
return sb.toString();
}
/**
* 字节标准移位转十六进制方法
*/
private static String byte2HexStr(byte b) {
String hexStr = null;
int n = b;
if (n < 0) {
// 若需要自定义加密,请修改这个移位算法即可
n = b & 0x7F + 128;
}
hexStr = Integer.toHexString(n / 16) + Integer.toHexString(n % 16);
return hexStr.toUpperCase();
}
/**
* 提供一个MD5多次加密方法
*/
public static String getMD5ofStr(String origString, int times) {
String md5 = getMD5ofStr(origString);
for (int i = 0; i < times - 1; i++) {
md5 = getMD5ofStr(md5);
}
return getMD5ofStr(md5);
}
/**
* 密码验证方法
*/
public static boolean verifyPassword(String inputStr, String MD5Code) {
return getMD5ofStr(inputStr).equals(MD5Code);
}
/**
* 重载一个多次加密时的密码验证方法
*/
public static boolean verifyPassword(String inputStr, String MD5Code,
int times) {
return getMD5ofStr(inputStr, times).equals(MD5Code);
}
/**
* 提供一个测试的主函数
*/
public static void main(String[] args) {
System.out.println("123:" + getMD5ofStr("123"));
System.out.println("123456789:" + getMD5ofStr("123456789"));
System.out.println("sarin:" + getMD5ofStr("sarin"));
System.out.println("123:" + getMD5ofStr("123", 4));
}
}
|
可以看出实现的过程非常简单,因为由java类库提供了处理支持。但是要清楚的是这种方式产生的密码不是标准的MD5码,它需要进行移位处理才能得到标准MD5码。这个程序的关键之处也在这了,怎么可变?调整移位算法不可变了么!不进行移位,也能够得到32位的密码,这不是标准加密了,只要加密和验证过程使用相同的算法可以了。
MD5加密还是很安全的,像CMD5那些穷举破解的只是针对标准MD5加密的结果进行的,如果自定义移位算法后,它还有效么?可以说是无解的了,所以MD5非常安全可靠。
为了更可变,还提供了多次加密的方法,可以在MD5基础之上继续MD5,是对32位的第一次加密结果再MD5,恩,这样去破解?没有任何意义。
这样在MIS系统中使用,安全可靠,欢迎交流,希望对使用者有用。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

sales@spasvo.com