我需要将以下代码从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。
答案 0 :(得分:1)
这里的困难在于读取和解码私钥。您可以使用following openssl helper class。一旦你引用它,你可以试试这个:
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,但您可以使用适合您的方案的任何内容。我认为openssl_sign默认使用SHA1。
答案 1 :(得分:1)