我需要将以下代码从 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。
这里的困难在于读取和解码私钥。你可以使用以下 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,但您可以使用适合您的场景的任何内容。我认为openssl_sign默认使用 SHA1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)