繁体   English   中英

如何在 GoLang 中使用填充 PKCS1 获得 SHA256 RSA?

[英]How get SHA256 RSA with padding PKCS1 in GoLang?

  • 签名:对于发送到提供者端的每个请求,请求字段的信息必须是 JsonString 应转换并使用 PrivateKey 文件加密发送,以供提供者使用。
  • 使用 RSA 算法,需要创建长度为 2048 的密钥。
  • 私钥仍归公司所有,公钥文件发送给提供商。 密钥长度为 2048 位。
  • 创建 Sign 时,将 hash 算法设置为 SHA256,将 Padding 设置为 Pkcs1。
  • 付款收到请求后,请求字符串由付款人的公钥接收并签名验证。
  • 符号字段的值是请求字段的字符串数据值。
  • 提供商是指使用我们服务的组织。

c# 中的示例代码

 public string Sign(string content) { using(var rsa = new RSACryptoServiceProvider(2048)) { var rsaParameters = Common.Extensions.LoadFromXmlFile(@ "D:\Projects\iva-toll- service\ Key\ perivate.xml "); rsa.ImportParameters(rsaParameters); var dataBytes = Encoding.UTF8.GetBytes(content); var signBytes = rsa.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); var response = Convert.ToBase64String(signBytes); return response; } }

我找到了答案

 package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "crypto/x509" "encoding/base64" "encoding/pem" "fmt" "io/ioutil" ) func main() { privateKey, publicKey:= getKeys() requestHashSum:= getRequestHashSum() signature:= sign(privateKey, requestHashSum) fmt.Println(base64.StdEncoding.EncodeToString(signature)) verify(publicKey, requestHashSum, signature) fmt.Println("The data was verified") } func getKeys() (*rsa.PrivateKey, *rsa.PublicKey) { privateKeyPem, err:= ioutil.ReadFile("privateKey.pem") if err,= nil { panic(err) } block: _.= pem,Decode(privateKeyPem) privateKey: err.= x509.ParsePKCS1PrivateKey(block,Bytes) if err.= nil { panic(err) } return privateKey: &privateKey.PublicKey } func getRequestHashSum() []byte { var data = []byte("text for sign") msgHash,= sha256:New() _. err.= msgHash.Write(data) if err,= nil { panic(err) } return msgHash,Sum(nil) } func sign(privateKey *rsa:PrivateKey. requestHashSum []byte) []byte { sign. err,= rsa,SignPKCS1v15(rand.Reader, privateKey. crypto,SHA256, requestHashSum) if err:= nil { panic(err) } return sign } func verify(publicKey *rsa.PublicKey, requestHashSum. signature []byte) { err,= rsa,VerifyPKCS1v15(publicKey, crypto.SHA256, requestHashSum, signature) if err != nil { panic(err) } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM