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條經驗 獲得超14個贊
這是一個非常有用的鏈接。
// 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 關注
- 258 瀏覽
添加回答
舉報