我需要将以下代码从php转换为C#。我需要使用哪些库/名称空间?
function sign($method, $uuid, $data) {
$merchant_private_key = openssl_get_privatekey(file_get_contents('merchant_private_key.pem'));
$plaintext = $method . $uuid . serialize_data($data);
**openssl_sign($plaintext, $signature, $merchant_private_key);**
return base64_encode($signature);
}api可以在http://php.net/manual/en/function.openssl-sign.php上找到。我从哪里开始?我不知道php中的open_ssl签名在封面后面做了什么。
任何能够帮助同时了解php和C#的人,或者至少有人可以解释openssl_sign在后台做什么,这样我就可以移植它。
编辑: 2010-08-18我找不到一种使用openssl的方法,它一直说它不能加载managedopenssl.dll。我认为这是因为我的机器是x64。
发布于 2010-08-20 13:16:16
发布于 2010-08-18 13:10:11
这里的困难在于读取和解码私钥。你可以用遵循openssl助手类。一旦您引用了它,您可以尝试如下:
public static string Sign(string method, string uuid, string data)
{
string merchantPrivateKey = File.ReadAllText("merchant_private_key.pem");
byte[] der = opensslkey.DecodePkcs8PrivateKey(merchantPrivateKey);
using (RSACryptoServiceProvider rsa = opensslkey.DecodePrivateKeyInfo(der))
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
// This will contain the data to sign
byte[] dataToSign = Encoding.Default.GetBytes(method + uuid + data);
byte[] signature = rsa.SignData(dataToSign, md5);
return Convert.ToBase64String(signature);
}
}在本例中,我使用了MD5,但您可以使用适合您的场景的任何内容。我认为签名默认使用SHA1。
https://stackoverflow.com/questions/3456922
复制相似问题