标签: hmac

在python中实现HMAC-SHA1

我正在尝试使用网站的OAuth,这要求签名方法仅为"HMAC-SHA1".

我想知道如何在Python中实现它?

python sha1 oauth hmac

41
推荐指数
5
解决办法
5万
查看次数

PHP:如何生成字符串的HmacSHA256签名

有没有办法在PHP中创建一个字符串的HmacSHA256签名?

php hmac

37
推荐指数
3
解决办法
5万
查看次数

Python3和hmac.如何处理字符串不是二进制

我在Python2中有一个运行良好的脚本.

def _generate_signature(data):
   return hmac.new('key', data, hashlib.sha256).hexdigest()
Run Code Online (Sandbox Code Playgroud)

数据是输出的地方json.dumps.

现在,如果我尝试在Python 3中运行相同类型的代码,我会得到以下内容:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/hmac.py", line 144, in new
    return HMAC(key, msg, digestmod)
  File "/usr/lib/python3.4/hmac.py", line 42, in __init__
    raise TypeError("key: expected bytes or bytearray, but got %r" %type(key).__name__)
TypeError: key: expected bytes or bytearray, but got 'str'
Run Code Online (Sandbox Code Playgroud)

如果我尝试将密钥转换为字节,如下所示:

bytes('key')
Run Code Online (Sandbox Code Playgroud)

我明白了

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string argument without an encoding
Run Code Online (Sandbox Code Playgroud)

我仍然在努力理解Python 3中的编码.

python string encoding hmac python-3.x

36
推荐指数
3
解决办法
3万
查看次数

使用HMAC-SHA1进行API身份验证 - 如何安全地存储客户端密码?

在使用S3样式身份验证的RESTful API中,API客户端使用HMAC-SHA1使用其密钥对请求进行签名,因此密钥永远不会通过线路传输.然后,服务器使用该客户端的密钥对客户端进行身份验证,以重复签名过程本身,并将结果与​​客户端发送的签名进行比较.

这一切都很好,但这意味着服务器需要访问客户端共享密钥的明文.面对所有的建议,反对在数据库中清除存储用户密码.就我所知,只存储密码的盐渍哈希不是一个选项 - 因为那时我无法验证客户端的签名.

我应该强调我的API是RESTful的,因此应该是无状态的:我宁愿在其他API调用之前避免登录步骤.

一种可选的解决方案是使用一些对称密钥算法加密所有用户密码.但是,服务器必须将密钥存储在易于访问的地方,例如在源代码内.这比没有好,但不是最佳解决方案(正如@Rook在他的回答中提到的,它违反了CWE-257).

解决方案的另一个方向可能是非对称签名,但我无法弄清楚如何将其应用于HMAC,并且找不到关于该主题的任何文章.

我错过了一些明显的东西吗?许多可敬的提供商已经实施了这种认证方案 - 它们不能都违反共同的安全原则,是吗?如果没有,您是否有可以分享的最佳实践?

security encryption password-protection hmac

30
推荐指数
2
解决办法
1万
查看次数

硬件令牌设备如何工作?

最近,我的银行发给我这个小设备,它生成一个必须在执行在线交易时使用的唯一代码,当我按下一个特定的白色按钮时,所有设备都会生成这个唯一的代码,它看起来不像是连接到一个远程服务器或其他任何东西.

我做了一些研究,最后在密码学中使用了一种称为Hash函数的东西,但我仍然没有得到它.

我的问题

  • 我银行的服务器如何知道该设备生成的代码是否正确?
  • 由于它每30秒只生成五个随机数字,为什么服务器不会验证我还决定使用的随机数?

hash cryptography hmac one-time-password two-factor-authentication

30
推荐指数
1
解决办法
4万
查看次数

加密算法列表

我试图找到一个列表strings,可以使用一个加密算法来适应这个功能,取而代之SHA256.

crypto.createHmac("SHA256", secret).update(string).digest('base64'),
Run Code Online (Sandbox Code Playgroud)

我已经了解到crypto使用的理解openssl,并且算法特定于运行node.js的每个系统.

使用以下命令,您可以看到系统可用的所有算法的列表.

openssl list-cipher-algorithms 
openssl list-cipher-commands 
Run Code Online (Sandbox Code Playgroud)

我已经将这两个命令的内容输出到了这个要点.

困扰我的是,SHA256这些都不在其中.

我真的很喜欢最终的算法列表.

javascript algorithm cryptography hmac node.js

29
推荐指数
2
解决办法
2万
查看次数

C#相当于PHP中的hash_hmac

使用.NET和C#我需要使用HMAC SHA512为PHP服务器提供完整性字符串.在C#中使用:

Encoding encoding = Encoding.UTF8;
byte[] keyByte = encoding.GetBytes(key);
HMACSHA512 hmacsha512 = new HMACSHA512(keyByte);
byte[] messageBytes = encoding.GetBytes(message);
byte[]  hashmessage = hmacsha512.ComputeHash(messageBytes);
return(ByteToString(hashmessage).toUpper());
Run Code Online (Sandbox Code Playgroud)

但它与PHP hash_hmac()PHP代码不匹配:

$hmac = strtoupper(hash_hmac($pbx_hash, $msg, $binKey));
Run Code Online (Sandbox Code Playgroud)

我尝试用C#(utf8,ASCII,Unicode)改变编码而没有成功.

我已尝试在网上找到很多解决方案,但没有给出相同的字符串:(

我无法更改PHP代码,也看不出C#中的错误

编辑这是ByteToString(从评论中复制):

static string ByteToString(byte[] buff)
{
    string sbinary = "";
    for (int i = 0; i < buff.Length; i++)
    {
        sbinary += buff[i].ToString("X2"); /* hex format */
    }
    return (sbinary);
}    
Run Code Online (Sandbox Code Playgroud)

经过多次发布后,我发现如果PHP hash_hmac键是一个字符串,而不是一个字节数组,我会得到相同的结果.似乎问题出在PHP转换函数$ binKey = pack("H*",$ keyTest);

c# hmac sha512

25
推荐指数
2
解决办法
2万
查看次数

如果所有API调用都是通过https进行的,那么HMAC是否必要?

如果通过https发送所有api呼叫,HMAC是否会添加任何额外的安全性?例如,在oauth 2中,客户端将其密钥发送给提供者而不进行任何散列.这被认为是安全的,因为它超过https?虽然不是严格的oauth,在这次通话中使用HMAC会使oauth 2更安全吗?如果是这样,为什么不是oauth 2的标准部分呢?

https hmac oauth-2.0

22
推荐指数
1
解决办法
6850
查看次数

PBKDF2-HMAC-SHA2测试载体

RFC6070中有针对PBKDF2-HMAC-SHA1的测试向量.RFC4231中有HMAC-SHA2的测试向量.

但到目前为止,我还没有在任何地方找到PBKDF2-HMAC-SHA2的测试向量.

我对SHA256最感兴趣,所以我会发布一些我用我的实现计算的向量.如果有人可以验证/确认,或者自己贡献,我会很高兴.

cryptography sha2 hmac pbkdf2

21
推荐指数
3
解决办法
1万
查看次数

xcode ios HMAC SHA 256哈希

所以我想弄清楚如何在ios上做一个hmacshad256哈希,因为这是我为我所做的wcf服务api做的哈希.我一直在尝试寻找有关它的一些信息,但通常最终会得到一个SHA-256哈希.

这是我唯一的参考:

需要像Java一样在Objective C中生成HMAC SHA256哈希

而且我不确定这是否是唯一的方法(导入java hmac类)

任何帮助表示赞赏.

谢谢!

cryptography objective-c sha256 hmac ios

18
推荐指数
2
解决办法
2万
查看次数