消息摘要算法
MD(Message Digest) :消息摘要,有MD2,MD4,MD5,长度一般为128位
SHA(Secure Hash Algorithm) :安全散列,SHA-1,SHA-2(224,256,384,512),固定长度
MAC(Message Authentication Code):消息认证码,MAC,HMAC,融合MD的HmacMD2,HmacMD4,HmacMD5,都是128位,融合SHA系列的HmacSHA1(160位), HmacSHA224(224位),HmacSHA256(256位),HmacSHA384(384位),HmacSHA512(512位)
它们是用来验证数据的完成性,是数字签名的核心算法。
MD5算法:
/**
* 生成 MD5
*
* @param data 待处理数据
* @return MD5结果
*/
public static String MD5(String data) throws Exception {
java.security.MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
return sb.toString().toUpperCase();
}
HmacSHA256算法:
/**
* 生成 HMACSHA256
* @param data 待处理数据
* @param key 密钥
* @return 加密结果
* @throws Exception
*/
public static String HMACSHA256(String data, String key) throws Exception {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
return sb.toString().toUpperCase();
}
SHA-1算法:
public static Boolean checkSignature(String s){
String mParms = null;//sha1加密
MessageDigest digest = null;
try {
digest = java.security.MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
mParms = hexString.toString();
if(mParms.equals(signature)){
System.out.println(mParms);
return true;
} else{
System.out.println(mParms);
return false;
}
}
/**
*
* @MethodName:byteToStr
*@ReturnType:String
*@param byteArray
*@return
*/
public static String byteToStr(byte[] byteArray){
String str = "";
for(int i=0;i<byteArray.length;i++){
str += byteToHexStr(byteArray[i]);
}
return str;
}
/**
*
* @MethodName:byteToHexStr
*@ReturnType:String
*@param mbyte
*@return
*/
public static String byteToHexStr(byte mbyte){
char[] Digit = {'1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F'};
char[] tempArr = new char[2];
tempArr[0] = Digit[(mbyte >>> 4) & 0X0F];
tempArr[1] = Digit[mbyte & 0X0F];
String s = new String(tempArr);
return s;
}
最近在整理一些资源工具,放在网站分享 http://tools.maqway.com
欢迎关注公众号:麻雀唯伊 , 不定时更新资源文章,生活优惠,或许有你想看的