亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 golang 的 RSA 簽名結果和 OpenSSL 命令的結果不一樣?

為什么 golang 的 RSA 簽名結果和 OpenSSL 命令的結果不一樣?

Go
慕神8447489 2022-07-04 10:02:31
最近在一個項目中遇到了RSA簽名。希望有經驗的兄弟幫幫忙。我使用的 OpenSSL(版本 1.0.2u)命令:echo -n -e "test\n"|openssl dgst -sha256 -sign ./apiclient_key.pem| openssl base64 -A結果如下pyoBMuN8UqRGLVR7YcQ11yn+dQ9rSU/fB7obQhs27eotvd51q+E8BqxB6AYQDTnlqAQnOiR1rnuxPjlGkAOaPxpCqfhS5VGblh3HuNNHiycdKKa5mM1XyaWROiL7YpyYHRUcblkICW4XEN8v5wyFHxQ+TZfBN8fdqmlLdSczZ66YnIUgaWjBkdC1UH9GqMOQkySaQbgxjh4WhWvVE4umlKz+lAj9OLBhqI/ZXcs6gPFIpyNl8hlMPi6QOxFDSPZmQZl9G7mzx4E0lBoCY5XJtm5VwG3IYTryKZvSF0/GjVyR6QA3/sY25WCPL6f/y0biovk+mJ2KvPvPX26hK4DYug==我的簽名相關的golang代碼:// get private keybPrivateKey, err := ioutil.ReadFile("./apiclient_key.pem")if err != nil || bPrivateKey == nil {    log.Println(err)    return}block, _ := pem.Decode(bPrivateKey)if block == nil {    return}pKeyInterface, err := x509.ParsePKCS8PrivateKey(block.Bytes)if err != nil {    log.Println(err)    return}pKey, ok := pKeyInterface.(*rsa.PrivateKey)if !ok {    return}// signstrForSign = "test\n"shaForSign := sha256.New()shaForSign.Write([]byte(strForSign))hashedForSign := shaForSign.Sum(nil)rawSignature, err := rsa.SignPKCS1v15(rand.Reader, pKey, crypto.SHA256, hashedForSign)if err != nil {    log.Println(err)    return}signature := base64.StdEncoding.EncodeToString(rawSignature)log.Println(signature)結果如下NcW5pBmUfHqVNus1PTDjGOilazWkcyxquGc/Ldu5IAjg/gAIQOKBGp7rs8thec/THhWKjZOJtZ1Xvv85vc+bG5bB4IuCZp+wkUMgDC3kFuTPjtLEBBnlhshZ1nS0Haq5BuS6aWAF9sIz6Ulq9dLMjaOAACijwEltdOdkRo8Z5V01CZMOPM3FI0dVvTGOvXxsMvLjw3XPAxNpajXhxTTGZB5jElDkTb61U/cZ9tM+iVpd7Oo+vxvgCsrx2VhV4gURrxndj3V6Nc2iNV2bByrgw8XK1htzkqLqZpWo8JF8i5LdMrfaMukn6aikhWKFOo2icatjowiSQAAXrj9EnnrbQA==
查看完整描述

1 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

$ echo -n -e "test\n" | openssl dgst -sha256 -sign ./apiclient_key.pem | openssl base64 -A

NcW5pBmUfHqVNus1PTDjGOilazWkcyxquGc/Ldu5IAjg/gAIQOKBGp7rs8thec/THhWKjZOJtZ1Xvv85vc+bG5bB4IuCZp+wkUMgDC3kFuTPjtLEBBnlhshZ1nS0Haq5BuS6aWAF9sIz6Ulq9dLMjaOAACijwEltdOdkRo8Z5V01CZMOPM3FI0dVvTGOvXxsMvLjw3XPAxNpajXhxTTGZB5jElDkTb61U/cZ9tM+iVpd7Oo+vxvgCsrx2VhV4gURrxndj3V6Nc2iNV2bByrgw8XK1htzkqLqZpWo8JF8i5LdMrfaMukn6aikhWKFOo2icatjowiSQAAXrj9EnnrbQA==%  

我會仔細檢查你是如何在 shell 中運行 openssl 命令的。任何到 stdout 的無關輸出都會改變簽名。


我從 1.0.2n-fips 和 openssl-3.0.0-alpha6 以及在本地運行您的 Go 代碼獲得了“NcW..”簽名。


查看完整回答
反對 回復 2022-07-04
  • 1 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號