可变在这里含义很简单,就是最终的加密结果是可变的,而非必需按标准MD5加密实现。Java类库security中的MessageDigest类就提供了MD5加密的支持,实现起来非常方便。为了实现更多效果,我们可以如下设计MD5工具类。
J次加密时的密码验证方法
*/
public static boolean verifyPassword(String inputStr, String MD5Code, int times) {
return getMD5ofStr(inputStr, times).equals(MD5Code);
}
/**
* 提供一个测试的主函数
*/
public static void main(String[] args) {
("123:" + getMD5ofStr("123"));
("123456789:" + getMD5ofStr("123456789"));
("sarin:" + getMD5ofStr("sarin"));
("123:" + getMD5ofStr("123", 4));
}
}
可以看出实现的过程非常简单,因为由java类库提供了处理支持。但是要清楚的是这种方式产生的密码不是标准的MD5码,它需要进行移位处理才能得到标准MD5码。这个程序的关键之处也在这了,怎么可变?调整移位算法不就可变了么!不进行移位,也能够得到32位的密码,这就不是标准加密了,只要加密和验证过程使用相同的算法就可以了。
MD5加密还是很安全的,像CMD5那些穷举破解的只是针对标准MD5加密的结果进行的,如果自定义移位算法后,它还有效么?可以说是无解的了,所以MD5非常安全可靠。
为了更可变,还提供了多次加密的方法,可以在MD5基础之上继续MD5,就是对32位的第一次加密结果再MD5,恩,这样去破解?没有任何意义。
这样在MIS系统中使用,安全可靠,欢迎交流,希望对使用者有用。
我们最后看看由MD5加密算法实现的类,那是非常庞大的。
Java代码
import .*;
/**
* **********************************************
* md5 类实现了RSA Data Security,
* 的RFC1321中的MD5 message-digest 算法。
* ***********************************************
*/
public class MD5 {
/* 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的,
这里把它们实现成为static final是表示了只读,切能在同一个进程空间内的多个
Instance间共享*/
static final int S11 = 7;
static final int S12 = 12;
static final int S13 = 17;
static final int S14 = 22;
static final int S21 = 5;
static final int S22 = 9;
static final int S23 = 14;
static final int S24 = 20;
static final int S31 = 4;
static final int S32 = 11;
MD5加密 来自淘豆网www.taodocs.com转载请标明出处.