Java常用数据加密算法
Java的数据加密算法,HmacSHA1,MD5等。java自带了加密的方法类SecretKey。
private static final String MAC_name="HmacSHA1";
private static final String ENCODING="UTF-8";
/**
*使用HMAC-SHA1签名方法对对encryptText进行签名
*@paramencryptText被签名的字符串
*@paramencryptKey密钥
*@return返回被加密后的字符串
*@throwsException
*/
public static String HmacSHA1Encrypt(String encryptText, String encryptKey)throws Exception{
byte[] data = encryptKey.getBytes( ENCODING );
// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKey secretKey = new SecretKeySpec( data, MAC_NAME );
// 生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance( MAC_NAME );
// 用给定密钥初始化 Mac 对象
mac.init( secretKey );
byte[] text = encryptText.getBytes( ENCODING );
// 完成 Mac 操作
byte[] digest = mac.doFinal( text );
StringBuilder sBuilder = bytesToHexString( digest );
return sBuilder.toString();
}
/**
* 使用 HMAC-SHA1 签名方法对对e
* @param encryptData 被签名的字
* @param encryptKey 密钥
* @return 返回被加密后的字符串
*/
public static String hmacSHA1Encrypt( byte[] encryptData, String encryptKey ) throws Exception{
byte[] data = encryptKey.getBytes( ENCODING );
// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKey secretKey = new SecretKeySpec( data, MAC_NAME );
// 生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance( MAC_NAME );
// 用给定密钥初始化 Mac 对象
mac.init( secretKey );
// 完成 Mac 操作
byte[] digest = mac.doFinal( encryptData );
StringBuilder sBuilder = bytesToHexString( digest );
return sBuilder.toString();
}
/**
* 转换成Hex
* @param bytesArray
*/
public static StringBuilder bytesToHexString( byte[] bytesArray ){
if ( bytesArray == null ){
return null;
}
StringBuilder sBuilder = new StringBuilder();
for ( byte b : bytesArray ){
String hv = String.format("%02x", b);
sBuilder.append( hv );
}
return sBuilder;
}
public static String md5(String str) {
StringBuilder sb = new StringBuilder();
try {
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(str.getBytes("UTF8"));
byte bytes[] = m.digest();
for (int i = 0; i < bytes.length; i++) {
if ((bytes[i] & 0xff) < 0x10) {
sb.append("0");
}
sb.append(Long.toString(bytes[i] & 0xff, 16));
}
} catch (Exception e) {
}
return sb.toString();
}
public static String createSign(Map<String,String> params,String appkey) throws Exception {
String queryString = getString(params);
return HmacSHA1Encrypt(queryString,appkey);
}
//
private static String getString(Map<String, String> params) {
List<String> sList = new ArrayList<String>();
for(Entry<String,String> entry:params.entrySet()){
sList.add(entry.getKey()+"="+entry.getValue());
}
String queryString = Joiner.on("&").join(sList);
return queryString;
}
/**
* HmacMD5算法
* @param msg 加密信息
* @param keyString 秘钥
* @return digest 结果
*/
public static String hmacMD5(String msg, String keyString) {
String digest = null;
try {
SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), "HmacMD5");
Mac mac = Mac.getInstance("HmacMD5");
mac.init(key);
byte[] bytes = mac.doFinal(msg.getBytes("UTF-8"));
StringBuffer hash = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
hash.append('0');
}
hash.append(hex);
}
digest = hash.toString();
} catch (UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException e) {
}
return digest;
}