当前位置:   article > 正文

HMAC-SHA1签名算法(JAVA和PHP) base64签名算法(PHP)_hmac_sha1 base64encode

hmac_sha1 base64encode

HMAC

根据RFC 2316(Report of the IAB,April 1998),HMAC(散列消息身份验证码: Hashed Message Authentication Code)以及IPSec被认为是Interact安全的关键性核心协议。它不是散列函数,而是采用了将MD5或SHA1散列函数与共享机密密钥(与公钥/私钥对不同)一起使用的消息身份验证机制。基本来说,消息与密钥组合并运行散列函数。然后运行结果与密钥组合并再次运行散列函数。这个128位的结果被截断成96位,成为MAC.。

hmac主要应用在身份验证中,它的使用方法是这样的: 
1. 客户端发出登录请求(假设是浏览器的GET请求) 
2. 服务器返回一个随机值,并在会话中记录这个随机值 
3. 客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器 
4. 服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法 。
在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的hmac结果,而对于截获了这两个值的黑客而言这两个值是没有意义的,绝无获取用户密码的可能性,随机值的引入使hmac只在当前会话中有效,大大增强了安全性和实用性。大多数的语言都实现了hmac算法,比如php的mhash、python的hmac.py、java的MessageDigest类,在web验证中使用hmac也是可行的,用js进行md5运算的速度也是比较快的。

SHA

安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1。其对长度不超过264二进制位的消息产生160位的消息摘要输出,按512比特块处理其输入。 
SHA是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说时对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。

HMAC_SHA1

HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一种安全的基于加密hash函数和共享密钥的消息认证协议。它可以有效地防止数据在传输过程中被截获和篡改,维护了数据的完整性、可靠性和安全性。HMAC_SHA1消息认证机制的成功在于一个加密的hash函数、一个加密的随机密钥和一个安全的密钥交换机制。 
HMAC_SHA1 其实还是一种散列算法,只不过是用密钥来求取摘要值的散列算法。 
HMAC_SHA1算法在身份验证和数据完整性方面可以得到很好的应用,在目前网络安全也得到较好的实现。

 

JAVA(HMAC-SHA1加密算法):

  1. import javax.crypto.Mac;
  2. import javax.crypto.SecretKey;
  3. import javax.crypto.spec.SecretKeySpec;
  4. import org.apache.commons.codec.binary.Base64;
  5. /**
  6. *
  7. * [Hmac-SHA1 签名算法]
  8. * @String encryptText [加密字符源串]
  9. * @String encryptKey [加密密钥]
  10. * @return [签名值]
  11. */
  12. public class HmacSHA1 {
  13. private static final String MAC_NAME = "HmacSHA1";
  14. public static final String ENCODING = "UTF-8";
  15. //签名方法
  16. public static String HmacSHA1Encrypt(String encryptText,String encryptKey ) throws Exception{
  17. byte[] data = encryptKey.getBytes( ENCODING );
  18. SecretKey secretKey = new SecretKeySpec( data, MAC_NAME );
  19. Mac mac = Mac.getInstance( MAC_NAME );
  20. mac.init( secretKey );
  21. byte[] text = encryptText.getBytes( ENCODING );
  22. byte[] digest = mac.doFinal( text );
  23. return new String(Base64.encodeBase64(digest));
  24. }
  25. }

PHP(HMAC-SHA1+base64加密算法):

  1. <?php
  2. /**
  3. * [HmacSHA1Encrypt HMAC-SHA1加密算法]
  4. * @param String $encryptText [加密文本源串]
  5. * @param String $encryptKey [加密密钥]
  6. * @return 签名串值
  7. *
  8. */
  9. function HmacSHA1Encrypt(String $encryptText,String $encryptKey ){
  10. $signature = "";
  11. if(function_exists('hash_hmac')){
  12. $hash_hmac = hash_hmac("sha1",$encryptText,$encryptKey,true);
  13. $signature = base64_encode($hash_hmac);
  14. }else{
  15. $blocksize = 64;
  16. $hashfunc = 'sha1';
  17. if(strlen($encryptKey) > $blocksize) {
  18. $encryptKey = pack("H*", $hashfunc($encryptKey));
  19. }
  20. $encryptKey = str_pad($encryptKey, $blocksize, chr(0x00));
  21. $ipad = str_repeat(chr(0x36), $blocksize);
  22. $opad = str_repeat(chr(0x5c), $blocksize);
  23. $hmac = pack("H*", $hashfunc(($encryptKey ^ $opad).pack('H*', $hashfunc(($encryptKey ^ $ipad).$str))));
  24. $signature = base64_encode($hmac);
  25. }
  26. return $signature;
  27. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/447828
推荐阅读
  

闽ICP备14008679号