我在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,这将得到正确的答案。但是,我想知道是否有单线方程可以避免检查。
谢谢!
答案 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)
这可以解决否定的答案。