java加密算法--MD5加密和哈希散列带秘钥加密算法源码
java加密算法--MD5加密和哈希散列带秘钥加密算法源码
最近学习加密算法的知识,利用MD5 加密,百度一下网上资料很多,不是很详细,这里就整理下如何实现用MD5加密和哈希散列带秘钥加密算法,大家可以看下。
实现代码:
packagecom.ompa.common.utils;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjavax.crypto.Mac;
importjavax.crypto.SecretKey;
importjavax.crypto.spec.SecretKeySpec;
/**
*采用MD5加密
*
*@authorzhangcd
*@date2016-4-29
*/
publicclassEncryptUtil{
privatestaticfinalStringMAC_NAME="HmacSHA1";
privatestaticfinalStringENCODING="UTF-8";
privatestaticfinalStringkey="iloveyou";
/***
*MD5加码生成32位md5码
*/
publicstaticStringstring2MD5(StringinStr){
MessageDigestmd5=null;
try{
md5=MessageDigest.getInstance("MD5");
}catch(Exceptione){
System.out.println(e.toString());
e.printStackTrace();
return"";
}
char[]charArray=inStr.toCharArray();
byte[]byteArray=newbyte[charArray.length];
for(inti=0;i<charArray.length;i++)
byteArray[i]=(byte)charArray[i];
byte[]md5Bytes=md5.digest(byteArray);
StringBufferhexValue=newStringBuffer();
for(inti=0;i<md5Bytes.length;i++){
intval=((int)md5Bytes[i])&0xff;
if(val<16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
returnhexValue.toString();
}
/***
*MD5加密生成32位md5码
*/
publicstaticStringstringMD5(StringinStr){
returnstring2MD5(string2MD5(inStr));
}
/**
*加密解密算法
*/
publicstaticStringconvertMD5(StringinStr){
char[]a=inStr.toCharArray();
for(inti=0;i<a.length;i++){
a[i]=(char)(a[i]^'t');
}
Strings=newString(a);
returns;
}
/**
*HMAC-SHA1
*@paramencryptText
*@paramencryptKey
*@return
*@throwsException
*/
publicstaticStringHmacSHA1Encrypt(StringencryptText,StringencryptKey)throwsException
{
byte[]data=encryptKey.getBytes(ENCODING);
SecretKeysecretKey=newSecretKeySpec(data,MAC_NAME);
Macmac=Mac.getInstance(MAC_NAME);
mac.init(secretKey);
byte[]text=encryptText.getBytes(ENCODING);
byte[]str=mac.doFinal(text);
//CreateHexString
StringBufferhexString=newStringBuffer();
//字节数组转换为十六进制数
for(inti=0;i<str.length;i++){
StringshaHex=Integer.toHexString(str[i]&0xFF);
if(shaHex.length()<2){
hexString.append(0);
}
hexString.append(shaHex);
}
returnhexString.toString();
}
publicstaticStringconvertSHA1(Stringinstr){
try{
returnHmacSHA1Encrypt(instr,key);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
return"";
}
}
//测试主函数
publicstaticvoidmain(Stringargs[])throwsException{
//哈希散列带秘钥加密
Stringtt=convertSHA1("123456");
System.out.println(tt);
//MD5加密
Strings=newString("123456");
System.out.println("原始:"+s);
System.out.println("MD5后:"+string2MD5(s));
System.out.println("MD5加密后:"+stringMD5(s));
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!