我试图弄清楚HMAC SHA-256哈希算法是如何工作的.我知道我们必须使用以下方法:
H (K ^ opad)|| H ((K ^ ipad)|| text)).我所面临的问题是,我想到了对上述问题的基本理解。据我所知,SHA-256接受“字符输入”。我使用的密钥是256位大小,这导致(K^ipad)是一个512位数。我如何使用它来获得所需的散列?
发布于 2015-01-17 15:40:25
SHA-256定义为使用位输入和输出二进制数据。不过,大多数库只根据字节输入而不是位输入执行计算。所以一般来说,SHA-256操作的是字节,而不是字符。
您需要使用字符编码(如UTF-8 )将字符显式地编码为字节,以使用SHA-256。有些平台将字符隐式转换为字节,甚至将字符等同于字节(C/C++中的char类型),但最好使用显式转换。
千万不要混淆字符和字节,它是堆叠溢出密码学问题的一半来源(以及领域中系统上的无数bug,而不仅仅是密码问题)。
在比较库的实现时,不要针对internet上的随机站点进行测试,它们通常也会出现编码/解码错误。相反,与测试向量进行比较,可以明确哪些字节是实际处理的。
在使用正式测试向量成功后,可以与已知的好库(Java、OpenSSL等)执行字符串比较。使用显式指定字符串编码的代码。
https://crypto.stackexchange.com/questions/22468
复制相似问题