3 回答
TA贡献1785条经验 获得超4个赞
除了helmbert 的回答中echo描述的添加的换行符之外,OpenSSL命令直接对提供的数据进行操作,而 Go 代码首先使用 SHA256 对数据进行哈希处理,然后对生成的摘要进行签名。rsautl
要使用 OpenSSL 执行与 Go 代码相同的操作,您可以使用带有选项的dgst命令-sign(请注意,我在这里也包含了该-n选项echo):
$ echo -n "Test." | openssl dgst -sha256 -sign private.key -hex
52e1cce3810c1a89693cf6965d1035618820a9e3a7b95203d885c4153dc3f7424b98e3ba628a186f1074d672bb59a1c0788a9c2064951ca2326eb1bf8e3e49e9
要在 Go 代码中不散列的情况下对原始消息进行签名,您可以将参数0的值传递hash给rsa.SignPKCS1v15:
indata := []byte("Test.")
s, err := rsa.SignPKCS1v15(nil, privKey, 0, indata)
TA贡献2016条经验 获得超9个赞
该echo命令打印一个带有尾随换行符(\n或0a)的字符串:
> echo 'Test.' | hexdump -C
00000000 54 65 73 74 2e 0a |Test..|
00000006
所以在你的情况下,你是Test.\n第一次签名,Test.第二次是在你的 Go 程序中。使用echo's-n开关来抑制尾随换行符:
> echo -n 'Test.' | hexdump -C
00000000 54 65 73 74 2e |Test.|
00000005
TA贡献2065条经验 获得超13个赞
这是一个非常有用的链接。
// Sign secret with rsa with PKCS 1.5 as the padding algorithm
// The result should be exactly same as "openssl rsautl -sign -inkey "YOUR_RSA_PRIVATE_KEY" -in "YOUR_PLAIN_TEXT""
signer, err := rsa.SignPKCS1v15(rand.Reader, rsaPrivateKey.(*rsa.PrivateKey), crypto.Hash(0), []byte(message))
https://github.com/bitmartexchange/bitmart-go-api/blob/master/bm_client.go
- 3 回答
- 0 关注
- 215 浏览
添加回答
举报