1、概述
SHA 算法(安全散列算法)是基于 MD4算法基础之上的,作为 MD算法的继承者,成为了新一代的消息摘要算法的代表;其与 MD算法的不同之处主要在于摘要长度,SHA算法的摘要长度更长,安全性更高。
2、数据模型
3、两种实现方式
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.digest.DigestUtils;
public class SHACoder {
public static void main(String[] args) {
String source = "信息摘要-test";
String encodeStr = encodeSHA128(source);
System.out.println(source + "-SHA-128 加密:" + encodeStr);
System.out.println("-------------------------");
String ss = encodeCommonCodecSHA128(source);
System.out.println(source + "-commons codec SHA-128 加密:" + ss.toUpperCase());
/**console 结果:
* 信息摘要-test-SHA-128 加密:C12EEED1866319AD29E59DF55931A90D90177754
-------------------------
信息摘要-test-commons codec SHA-128 加密:C12EEED1866319AD29E59DF55931A90D90177754
*/
}
/**
* SHA 128 位信息摘要
* @param source
* @return
*/
public static String encodeSHA128(String source){
StringBuffer sb = new StringBuffer();
try {
MessageDigest md = MessageDigest.getInstance("SHA");
byte[] b = md.digest(source.getBytes("utf-8"));
for (int i = 0; i < b.length; i++) {
sb.append(Integer.toHexString((b[i] & 0xFF) | 0x100).toUpperCase().substring(1, 3));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* SHA 256 位信息摘要
* @param source
* @return
*/
public static String encodeSHA256(String source){
StringBuffer sb = new StringBuffer();
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] b = md.digest(source.getBytes("utf-8"));
for (int i = 0; i < b.length; i++) {
sb.append(Integer.toHexString((b[i] & 0xFF) | 0x100).toUpperCase().substring(1, 3));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* Commons Codec 128位 信息摘要
* @param source
* @return
*/
public static String encodeCommonCodecSHA128(String source){
String ss = null;
try {
ss = DigestUtils.sha1Hex(source.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return ss;
}
/**
* Commons Codec 256位 信息摘要
* @param source
* @return
*/
public static String encodeCommonCodecSHA256(String source){
String ss = null;
try {
ss = DigestUtils.sha256Hex(source.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return ss;
}
}