计算用于填充SHA-256消息的

时间:2015-05-30 22:36:37

标签: algorithm hash

我在VHDL中实施SHS SHA-256算法,并且在填充时遇到解决 k 等式的方法时遇到问题带零的消息。该等式在SHS描述中概述如下:

  

将位“1”添加到结尾处   消息,后跟 k 零位,其中 k 是等式的最小非负解   l + 1 + k ≡ 448mod512

如果k = 448 - (l mod 512 + 1)小于或等于448,我已经看到等式l mod 512,但如果它更大,则得到k的负数。我理解在这种情况下我们只需要附加" 1",填充" 0" s直到我们达到512,然后用448个零填充,然后填充64位二进制表示消息长度。

一个类似的问题here回答了一个例子:

  

好吧,如果l = 448(比如说),那么规范中方程的解就是k = 511

我知道511来自哪里,但我无法弄清楚如何更改方程式以获得此数字。使用上面的等式得到k = -1。我知道在k为负的情况下我可以在结果k中加512,这将得到正确的答案。但是,我想知道是否有单线方程可以避免检查。

谢谢!

1 个答案:

答案 0 :(得分:1)

我意识到我可以在等式的rhs中添加512,然后将整个事物修改为512:

data = {'username' => 'XXXX@XXXXXXX.com','password' => 'XXXXX'} uri = URI.parse("https://api.wheniwork.com/2/login/") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new(uri.path) request.add_field('W-Key', 'XXXXXXXXXXXXX') request.body = data.to_json response = http.request(request) puts JSON.parse(response.body)

这可以解决否定的答案。