example code in 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;
}
}
I found answer
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)
}
}