当前位置:首页 > 操作系统 > MacOs

CodeGo.net>在Python中使用密钥使用HMAC SHA-512算法

在Python中使用密钥使用HMAC SHA-512算法' />

我正在尝试在python中使用密钥使用HMAC SHA-512算法,但找不到正确的签名方式.

我能够使用nodejs和c#来做,但不能用于python

在nodejs中

<code>return crypto.createHmac('sha512', new Buffer(secretString, 'base64')).update(new Buffer(stringToSign)).digest('base64');
</code>

在C#中

<code>byte[] secretkeyBytes = Encoding.UTF8.GetBytes(apiSecret);
byte[] inputBytes = Encoding.UTF8.GetBytes(stringToSign);
using (var hmac = new HMACSHA512(secretkeyBytes))
{
  byte[] hashValue = hmac.ComputeHash(inputBytes);
  signature = System.Convert.ToBase64String(hashValue);
}
</code>

但是在python中我没有找到一种方法来做到这一点.
我已经尝试过:

<code>b_secret_string=base64.b64encode(secret_string.encode('utf-8'))
hash = hmac.new(base64.b64encode(b_secret_string),'',sha512)
hash.update(string_to_sign.encode('utf-8'))
signature = base64.b64encode(hash.digest())
</code>

<code>hashed = hmac.new(str(secret_string.encode('utf-8')),'',sha512)
hashed.update(string_to_sign.encode('utf-8'))
signature = base64.b64encode(hashed.digest())
</code>

但它不起作用.如果可以的话,有人可以给我开个灯吗?我真的很感激.

更新:

还尝试了以下方法:

<code>string_to_sign = string_to_sign.encode('utf-8')
secret_string = secret_string.encode('utf-8')
hash = hmac.new(secret_string, string_to_sign, hashlib.sha512)
signature = base64.b64encode(hash.digest())
</code>

也尝试使用hexdigest():

<code>signature = base64.b64encode(hash.hexdigest())
</code>

如果有人想测试它.应该在nodejs中返回与此代码相同的代码.

<code>var crypto = require('crypto');

a = new Buffer('PRIVATE_KEY', 'base64');
hash = crypto.createHmac('sha512', a)
stringToSign = 'Stack OverFlow Funtime';
hash.update(new Buffer(stringToSign));
console.log(hash.digest('base64'));

$node example.js
ugmH0VdttdAxGdpzNJnaNn1KlVS4wBzoK//dsPuvK65Zsl8FgT+3aLGnsEubThlv5/3chfyMmsUH//LdS1MXqg==
</code>

解决方法:

我找到了一种在python中执行相同操作的方法.如果将来有人因同一问题通过考试,请在此处回答.

<code>    hmac_key = base64.b64decode(secret_string)
    signature = hmac.new(hmac_key, string_to_sign, hashlib.sha512)
    signature_b64 = signature.digest().encode('base64')
    signature_lines = signature_b64.splitlines()
    signature_b64 = ''.join(signature_lines)
</code>

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐