- 单向加密
简介
单向加密即无法复原的,加密后无法解密的加密方法,代表算法有MD5跟SHA
MD5
MD5也叫哈希算法,严格来讲不叫加密,而是对数据生成了不可逆的二进制摘要。原值是128位,常见的16,32都是在此基础上的截取。
[md5介绍](http://www.weixuehao.com/archives/474)
import java.security.MessageDigest;
public class MD5Test {
public static void main(String[] args) {
String result = getMD5("aaa");
System.err.println(result);
}
/**
* 生成md5
* @param message
* @return
*/
public static String getMD5(String message) {
String md5str = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] input = message.getBytes();
byte[] buff = md.digest(input);
md5str = bytesToHex(buff);
} catch (Exception e) {
e.printStackTrace();
}
return md5str;
}
/**
* 二进制转十六进制
* @param bytes
* @return
*/
public static String bytesToHex(byte[] bytes) {
StringBuffer md5str = new StringBuffer();
int digital;
for (int i = 0; i < bytes.length; i++) {
digital = bytes[i];
if(digital < 0) {
digital += 256;
}
if(digital < 16){
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}
}
SHA
也称“安全哈希算法”,将数据转化成不可逆的长度较短,位数固定(160位)的散列值。主要有SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512
import java.security.MessageDigest;
/**
* 采用SHAA加密
* @author Xingxing,Xie
* @datetime 2014-6-1
*/
public class SHAUtil {
/***
* SHA加密 生成40位SHA码
* @param 待加密字符串
* @return 返回40位SHA码
*/
public static String shaEncode(String inStr) throws Exception {
MessageDigest sha = null;
try {
sha = MessageDigest.getInstance("SHA");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}
byte[] byteArray = inStr.getBytes("UTF-8");
byte[] md5Bytes = sha.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
/**
* 测试主函数
* @param args
* @throws Exception
*/
public static void main(String args[]) throws Exception {
String str = new String("amigoxiexiexingxing");
System.out.println("原始:" + str);
System.out.println("SHA后:" + shaEncode(str));
}
}
两者的比较
- SHA均有MD4导出,但是SHA(160)要比MD5(128)要长32位,破解难道要大,相对的SHA的加密耗时要比MD5长