精华内容
下载资源
问答
  • asp版hmac_sha1加密方式,支持中英文,真正和PHP的hash_hmac加密结果完全一样,与java、php、python、js 一致,附对比。支持中文utf-8编码
  • 实现了带有秘钥的HASH函数(即HMAC),可以用于数据加密
  • PHP hash_hmac与Python hmac

    2020-08-28 10:20:07
    签名机制如下: ...import hmac import hashlib import base64 import urllib.parse timestamp = str(round(time.time() * 1000)) secret = 'this is secret' secret_enc = secret.encode('utf-8') strin

    今天为俺开发钉钉群自定义机器人ding-bot(PHP)增加签名支持,参考官方文档钉钉开发文档

    签名机制如下:

    #python 3.8 
    import time
    import hmac
    import hashlib
    import base64
    import urllib.parse
    
    timestamp = str(round(time.time() * 1000))
    secret = 'this is secret'
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    print(timestamp)
    print(sign)

    示例加密代码是python hmac

    hmac.new(key, msg=None, digestmod=None)

    与之对应的是php hash_hmac

    hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )
    
    • $algo 哈希算法名称,例如:"md5","sha256","sha1" 等。 如何获取受支持的算法清单,请参见 hash_algos()
    • $data 要进行哈希运行的消息
    • $key 使用的密钥
    • $raw_output 设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串

    因此PHP实现以上签名如下:

    $timestamp = time()*1000;
    $secret = 'this is secret';
    $stringToSign = $timestamp."\n".$secret;
    $hmacCode = hash_hmac('sha256',$stringToSign,$secret,true);
    $sign = urlencode(base64_encode($hmacCode));
    var_dump($timestamp);
    var_dump($sign);

     欢迎大家关注我的钉钉机器人ding-bot https://github.com/hbh112233abc/ding-bot 支持ThinkPHP6的日志通道哦:)

     

    展开全文
  • ... return hash_hmac('sha1', $raw . $salt, $this->secret); } </code></pre> <p>which I need to translate to Go. I found the following example, but it doesn't involve secret key. ...
  • 其中属HMAC-SHA1签名算法最多,刚开始接触的时候我也觉得有一点懵,慢慢搞清楚了原理,所以在这里跟大家如何理解这种签名算法中涉及到的各种各样的东西。 扫盲: 首先做个简单的扫盲 1、md5(md家族) Message...

    前言

    最近工作中频繁和其他部门甚至公司进行接口上的对接,不免接触到林林总总的签名验权算法。其中属HMAC-SHA1签名算法最多,刚开始接触的时候我也觉得有一点懵,慢慢搞清楚了原理,所以在这里跟大家如何理解这种签名算法中涉及到的各种各样的东西。

     

    扫盲:

    首先做个简单的扫盲

    1、md5(md家族)

    Message Digest Algorithm 缩写为MD,消息摘要算法,一种被广泛使用的密码散列函数。

    2、sha1(sha家族)

    secure hash algorithm 缩写为SHA,密码散列函数。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法,其实也就是我们常说的加密串长度固定。

    上述这些算法(md,sha)之所以称作安全算法基于以下两点:

    (1)由消息摘要反推原输入消息,从计算理论上来说是很困难的。说白了就是不可逆。

    (2)想要找到两组不同的消息对应到相同的消息摘要,从计算理论上来说是很困难的。任何对输入消息的变动,都会很高概率导致其产生的消息摘要迥异。说白了,就是加密串碰撞度较低,并且内容有微调,秘钥串生成差异化也很大。

    3、hamc

    HMAC:散列消息身份验证码 Hashed Message Authentication Code 。它不是散列函数,而是采用了将MD5或SHA1散列函数与共享机密秘钥(与公钥/秘钥对不同)一起使用的消息身份验证机制。消息与秘钥组合并运行散列函数(md5或sha1),然后运行结果与秘钥组合并再次运行散列函数。

    目前hmac主要应用在身份验证中,在用户登录传递密码的过程中可以利用,签名来防止密码明文传递。

    可参看该文:http://blog.csdn.net/yasi_xi/article/details/19968449

    讲到这里大家应该就能明白了,HMAC-SHA1简要来说,就是采用sha1算法,与HMAC机制相结合,制造出更加难以破解的加密串。

    hash_hmac

    在php中hash_hmac函数就能将HMAC和一部分哈希加密算法相结合起来实现HMAC-SHA1  HMAC-SHA256 HMAC-MD5等等算法。函数介绍如下:

    string hash_hmac(string $algo, string $data, string $key, bool $raw_output = false)

    algo:要使用的哈希算法名称,可以是上述提到的md5,sha1等

    data:要进行哈希运算的消息,也就是需要加密的明文。

    key:使用HMAC生成信息摘要是所使用的密钥。

    raw_output:该参数为可选参数,默认为false,如果设为true,则返回原始二进制数据表示的信息摘要,否则返回16进制小写字符串格式表示的信息摘要(注意是16进制数,而非简单的字母加数字)。

    另外:如果algo参数指定的不是受支持的算法,将返回false。

    应用:

    一般来讲,目前最流行的接口签名方式,是采用hash_hamc('sha1')方法;

    1、将 Accesskey(公钥)和Secretkey(私钥)简称ak,sk,告知客户端(或接口调用者)

    2、按照接口提供方的要求,提取出需要加密的消息串。比如uri;

    3、通过hash_hamc('sha1',uri,Secretkey);得到签名;

    3'、一般而言接口提供方,都会要求对加密串进行base64urlencode,防止签名串被特殊字符分割,导致验证无法通过。

    4、将签名注入http协议头中;$headerArr[] = 'accessToken:'.$akey.":".$ret;

    5、发送请求即可。

     

    以下是完整的php demo代码:

    [php] view plain copy

    1. $akey = "66a66666da6666666d66aa6a6aa6a6a66a666aa6";  
    2. $url = "http://api.xxx.com/web/api/xxx/xxx?u=".$u;  
    3. $uri = "/web/api/xxx/xxx?u=".$u."\n";  
    4. $SecretKey = '999999999999999999999999999999aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';  
    5. $str  = hash_hmac("sha1", $uri, $SecretKey);  
    6. $signature = base64UrlEncode($hex);  
    7. $headerArr = array();  
    8. $headerArr[] = 'accessToken:'.$akey.":".$ret;  
    9. $ch = curl_init();  
    10. curl_setopt($ch, CURLOPT_URL, $url);  
    11. curl_setopt($ch, CURLOPT_HEADER, false);  
    12. curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr);  
    13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    14. curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);  
    15. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);  
    16. curl_setopt($ch, CURLOPT_TIMEOUT, 10);  
    17. $return = curl_exec($ch);  
    18. curl_close($ch);  
    19.   
    20. function base64UrlEncode($str)  
    21. {  
    22.      $find = array('+', '/');  
    23.      $replace = array('-', '_');  
    24.      return str_replace($find, $replace, base64_encode($str));  
    25. }  
     
    1. $akey = "66a66666da6666666d66aa6a6aa6a6a66a666aa6";

    2. $url = "http://api.xxx.com/web/api/xxx/xxx?u=".$u;

    3. $uri = "/web/api/xxx/xxx?u=".$u."\n";

    4. $SecretKey = '999999999999999999999999999999aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';

    5. $str = hash_hmac("sha1", $uri, $SecretKey);

    6. $signature = base64UrlEncode($hex);

    7. $headerArr = array();

    8. $headerArr[] = 'accessToken:'.$akey.":".$ret;

    9. $ch = curl_init();

    10. curl_setopt($ch, CURLOPT_URL, $url);

    11. curl_setopt($ch, CURLOPT_HEADER, false);

    12. curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr);

    13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    14. curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

    15. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

    16. curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    17. $return = curl_exec($ch);

    18. curl_close($ch);

    19.  
    20. function base64UrlEncode($str)

    21. {

    22. $find = array('+', '/');

    23. $replace = array('-', '_');

    24. return str_replace($find, $replace, base64_encode($str));

    25. }

    总结:

    HMAC-SHA1是我在工作中接触到的最流行的一种加密算法,这里讲了如何一步步去理解这种加密算法,以及如何正确的使用hash_hmac函数来得到正确的加密串。

    展开全文
  • $hmacsignature = base64_encode(hash_hmac("sha256", $signature, base64_decode($APIKey), true)); </code></pre> <p>NODE CODE : <pre><code>var signature = ACCID+"POST"+encodeURI(url).toLowerCase()+...
  • Base64_hmac_sha1加密算法.rar
  • hash_hmac()趣事

    2019-07-10 09:21:49
    hash_hmac() 非常重要的通知,如果你将数组传递给$ data,php将生成一个警告,返回一个NULL并继续你的应用程序。 我认为这是一个关键漏洞,因为此功能通常用于检查授权。 比如: <?php var_dump(hash_hmac('sha...

    hash_hmac()

    非常重要的通知,如果你将数组传递给$ data,php将生成一个警告,返回一个NULL并继续你的应用程序。 我认为这是一个关键漏洞,因为此功能通常用于检查授权
    比如:

    <?php
    var_dump(hash_hmac('sha256', [], 'secret'));
    
    WARNING hash_hmac() expects parameter 2 to be string, array given on line number 3
    NULL
    ?>

    当然没有记录的功能。

    展开全文
  • 在对接环信客服云验签时遇到一个坑...使用hmac-sha256加密,然后对其返回的原始二进制数据进行base64编码。 上述示例的计算结果为: yLgHjb8GckRpZ2uW8kb0qipODRkaFCIBNQsnZ2vhGMo= Java 代码示例: String secre...

    在对接环信客服云验签时遇到一个坑,简单记录下

    官方示例如下

    第 2 步:根据Client Secret与待加密字符串计算signature

    使用hmac-sha256加密,然后对其返回的原始二进制数据进行base64编码。

    上述示例的计算结果为: yLgHjb8GckRpZ2uW8kb0qipODRkaFCIBNQsnZ2vhGMo=

    Java 代码示例:

    String secret = "02a0693ba5a57560df1f26a991204cb0";
    String message = "POST\n/api/tenants/5950/rest/channels/20/messages\n1489490514142\n705bfbd388d2bf852813fc90e655b5ed";
    final SecretKeySpec keySpec = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
    final Mac mac = Mac.getInstance("HmacSHA256");
    mac.init(keySpec);
    final byte[] result = mac.doFinal(message.getBytes());
    Base64.getEncoder().encodeToString(result);

    其他代码示例:Examples of creating base64 hashes using HMAC SHA256 in different languages

    PHP官方的示例如下:

    $s = hash_hmac('sha256', 'Message', 'secret', true);
    echo base64_encode($s);

     

    但是结果怎么都对应不上,解决办法,是因为message里面有一个\n导致的,把单引号改为双引号就好使了,代码如下

    $str = "POST\n/api/tenants/5950/rest/channels/20/messages\n1489490514142\n705bfbd388d2bf852813fc90e655b5ed";
    $key = '02a0693ba5a57560df1f26a991204cb0';
    $sig = hash_hmac("sha256", $str, $key, true);
    echo $sig = base64_encode($sig); 

     

    展开全文
  • 使用 HMAC 方法生成带有密钥的哈希值hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )参数 ¶algo要使用的哈希算法名称,例如:"md5","sha...
  • $hmac_sha256_str = base64_encode(hash_hmac("sha256", $signPlanText, $appSecret)); $signature = urlencode($hmac_sha256_str); return $signature; 还在想,PHP这么点代码就解决了?不愧是世界上最好的...
  • 钉钉签名算法与hash_hmac函数的使用

    千次阅读 2019-01-23 09:20:42
    1、在php中hash_hmac函数就能将HMAC和一部分哈希加密算法相结合起来实现HMAC-SHA1 HMAC-SHA256 HMAC-MD5等等算法。函数介绍如下: string hash_hmac(string $algo, string $data, string $key, bool $raw_output = ...
  • PHP 在php中hash_hmac函数就能将HMAC和一部分哈希加密算法相结合起来实现HMAC-SHA1 HMAC-SHA256 HMAC-MD5等等算法。 函数介绍如下: string hash_hmac(string $algo, string $data, string $key, bool $raw_output =...
  • 认证加密算法php hash_hmac和java hmacSha1的问题 public class Test{ public static void main(String[] args) throws Exception { String postString = "abc"; ...
  • hash_hmac(“MD5”, "a=1&b=data&c=2","私钥") php的这个函数内部是怎么实现的,我目前需要用java做一个签名函数,和php的hash_hmac函数功能一致,网上搜索的都使用不了,所以想知道这个函数底层源码是怎么实现...
  • java hash_hmac

    千次阅读 2017-06-23 11:34:49
    public static String getSignature(String data, String key) throws Exception { byte[] keyBytes = key.getBytes(); SecretKeySpec signingKey = new SecretKeySpec(keyBytes, MAC_NAME);
  • php中使用hash_hmac函数实现HMAC-SHA1签名算法 最近工作中遇到签名,跟大家如何理解这种签名算法中涉及到的各种各样的东西。 扫盲: 首先做个简单的扫盲 1、md5(md家族) Message Digest Algorithm 缩写为MD,消息...
  • def hmac_md5(key, msg):  if len(key) > blocksize:  key = md5(key).digest()  key = key + bytearray(blocksize - len(key))  o_key_pad = key.translate(trans_5C)  i_key_pad = key.translate(trans_36) ...
  • java HMACSHA1与php hash_hmac 函数

    千次阅读 2017-10-17 19:05:53
     * 展示了一个生成指定算法密钥的过程 初始化HMAC密钥  * @return  * @throws Exception   *  public static String initMacKey() throws Exception {   //得到一个 指定算法密钥的密钥生成器...
  • /** * @brief 使用HMAC-SHA1算法生成oauth_signature签名值 * * @param $key 密钥 * @param $str 源串 * * @return 签名值 */ 1 function getSignature($str, $key) { 2 $signatu...
  • API安全认证协议中要求使用hmac_sha1方法对信息进行编码 但是两边生成的签名一直不一致 php base64_encode(hash_hmac('sha1',$message, $accessKey, true)) java Mac mac = Mac.getInstance("HmacSHA1")...
  • <p>I have tried hash_hmac using just the "sha256" algo and it worked, so I think the problem must be with the one they want me to use. <p>Here is the code I use to process the Webhook: <pre><code>$...
  • <pre><code>hash_hmac('sha384', data, privateKey, true); </code></pre> <p>I have rewritten the above PHP code to ruby code below, but similar results were not obtained. <p>Ruby version: <pre><code>...
  • asp Hmac_SHA256加密计算,是asp调用JavaScript,钉钉签名计算用到 示例:内容=a,密码=a,哈希值:Ps9TiOIg2p4PkZSF3rZ22L7jrsBGp3k1O0Y0GFEe5iI=
  • $temp1 = hash_hmac('sha256', $salt, $password, true); echo "====================== <br>"; echo "password [${password}] <br>"; echo "salt [${salt}] <br>"; echo "=================...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,729
精华内容 5,491
关键字:

hash_hmac