protected string sign(string message)
{
// 需去除私钥文件中的-----BEGIN/END PRIVATE KEY-----
string privateKey = "MIIEvgIBADANBgkqhkiG...30HBe+GD1tntZgf6I1Y0ZpHZ";
byte[] keyData = Convert.FromBase64String(privateKey);
using (CngKey cngKey = CngKey.Import(keyData, CngKeyBlobFormat.Pkcs8PrivateBlob))
using (RSACng rsa = new RSACng(cngKey))
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(message);
return Convert.ToBase64String(rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));
}
}
我从https://myssl.com/cert_decode.html 把申请商户api时候得到的三个签名文件的第二个apiclient_cert.pem打开。复制了上面的这些内容,在下面这行代码 using (CngKey cngKey = CngKey.Import(keyData, CngKeyBlobFormat.Pkcs8PrivateBlob)),一直过不去,请问我的privateKey 是不是搞错了?如果没有搞错,从网站这复制的这个privite可以有带换行,能不能去掉?
问题解决了,直接记事本打开apiclient_key.pem复制(不包含begin,end那些注释内容),去除换行,然后赋值给privateKey。。