import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; public class HmacSHA1Encryption {
private static final String MAC_NAME = "HmacSHA1";
private static final String ENCODING = "UTF-8";
/**
* 使用 HMAC-SHA1 签名方法对对encryptText进行签名
* @param encryptText 被签名的字符串
* @param encryptKey 密钥
* @return 返回被加密后的字符串
* @throws Exception
*/
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();
} /**
* 转换成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;
} /**
* 使用 HMAC-SHA1 签名方法对对encryptText进行签名
*
* @param encryptData 被签名的字符串
* @param encryptKey 密钥
* @return 返回被加密后的字符串
* @throws Exception
*/
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();
}
} 作者:编程之乐
链接:http://www.jianshu.com/p/10f292f9b045
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. Android Studio解决未识别Java文件(出现红J)问题
  2. pyqt的信号槽机制(转)
  3. [css 揭秘]-css coding tips
  4. iOS 定位功能的实现
  5. HTML+JS+DOM【选项卡自动切换】
  6. Smart210学习记录----nand flash驱动
  7. jquery.autocomplete.js 两种实现方法
  8. ubuntu下设置开机自启动项
  9. MVC4升级MVC5 异常处理
  10. 开始Swift之旅 - HelloWorld
  11. 第21/22讲 UI_布局 之 线性布局
  12. window忘记密码怎么办
  13. css3-逐帧动画
  14. poj 3522 Kruskal
  15. 利用python写一个简单的小爬虫 爬虫日记(1)(好好学习)
  16. 04_Javascript初步第二天(上)
  17. [Harbor]Harbor简要介绍
  18. 洛谷P1123取数游戏题解
  19. csvwrite
  20. android -------- Eclipse选择NDK路径时 “Not a valid NDK directory”

热门文章

  1. Jni中图片传递的3种方式(转)
  2. SIP(Session Initiation Protocol,会话初始协议)
  3. 分享阿里云SLB-负载均衡的实现基本原理架构
  4. Android系统示例分析之AccelerometerPlay
  5. c#中用DirectShow实现媒体播放器
  6. EF性能
  7. C# params传递多个参数
  8. script的延迟执行
  9. struts2开发流程及配置,域对象对数据存储的3种方式
  10. Jquery使容器自适应浏览器窗口