
密码分析的安全性: 由于MD的设计,它很容易受到密码分析攻击,而SHA-似乎不太容易受到此类攻击.
速度: 在相同的硬件上,SHA-的运行速度比MD慢.
第四. HMAC
HMAC(哈希消息身份验证代码,哈希消息身份验证代码,基于密钥的哈希算法身份验证协议. 消息身份验证代码实现身份验证的原理是使用公用函数和密钥来生成固定长度的值作为身份验证标识符哪种加密算法最安全,使用该标识符来验证消息的完整性,使用密钥生成固定大小的小数据块MAC,然后将其添加到消息中,然后进行发送接收者使用与发送者共享的密钥等待身份验证.
Java实现代码:
package com.cn.单向加密;
/*
HMAC
HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。
消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。
使用一个密钥生成一个固定大小的小数据块,
即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。*/
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import com.cn.comm.Tools;
/**
* 基础加密组件
*/
public abstract class HMAC {
public static final String KEY_MAC = "HmacMD";
/**
* 初始化HMAC密钥
*
* @return
* @throws Exception
*/
public static String initMacKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);
SecretKey secretKey = keyGenerator.generateKey();
return BASE.encryptBASE(secretKey.getEncoded());
}
/**
* HMAC加密 :主要方法
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static String encryptHMAC(byte[] data, String key) throws Exception {
SecretKey secretKey = new SecretKeySpec(BASE.decryptBASE(key), KEY_MAC);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return new String(mac.doFinal(data));
}
public static String getResult(String inputStr)
{
String path=Tools.getClassPath();
String fileSource=path+"/file/HMAC_key.txt";
System.out.println("=======加密前的数据:"+inputStr);
String result=null;
try {
byte[] inputData = inputStr.getBytes();
String key = HMAC.initMacKey(); /*产生密钥*/
System.out.println("Mac密钥:===" + key);
/*将密钥写文件*/
Tools.WriteMyFile(fileSource,key);
result= HMAC.encryptHMAC(inputData, key);
System.out.println("HMAC加密后:===" + result);
} catch (Exception e) {e.printStackTrace();}
return result.toString();
}
public static String getResult(String inputStr)
{
System.out.println("=======加密前的数据:"+inputStr);
String path=Tools.getClassPath();
String fileSource=path+"/file/HMAC_key.txt";
String key=null;;
try {
/*将密钥从文件中读取*/
key=Tools.ReadMyFile(fileSource);
System.out.println("getResult密钥:===" + key);
} catch (Exception e) {
e.printStackTrace();}
String result=null;
try {
byte[] inputData = inputStr.getBytes();
/*对数据进行加密*/
result= HMAC.encryptHMAC(inputData, key);
System.out.println("HMAC加密后:===" + result);
} catch (Exception e) {e.printStackTrace();}
return result.toString();
}
public static void main(String args[])
{
try {
String inputStr = "简单加密";
/*使用同一密钥:对数据进行加密:查看两次加密的结果是否一样*/
getResult(inputStr);
getResult(inputStr);
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上内容是我与您分享的Java中一些常用的加密算法(四种类型). 希望你喜欢.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-210878-2.html
接受中国的崛起
水军太多了