【问题标题】:How do I port php's openssl_sign to C#?如何将 php 的 openssl_sign 移植到 C#?
【发布时间】:2010-08-20 21:16:16
【问题描述】:

我需要将以下代码从 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 的。

【问题讨论】:

    标签: c# php


    【解决方案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。

    【讨论】:

    • 感谢您的建议!不幸的是,我遇到了openssl的问题,我认为这与我的机器是x64有关。也找不到任何适用于 x64 的 openssl.net。
    • @CatZ:您可以通过编译选项强制应用程序以 32 位模式运行。这应该允许它运行 32 位 DLL。
    • @CatZ:或者,此页面上有 OpenSSL 的 Win64 版本:slproweb.com/products/Win32OpenSSL.html
    • @R。 Bemrose:是的,这就是 desco 的链接带我去的地方。
    【解决方案2】:

    感谢您的建议。

    我找到了解决问题的方法。我们将使用一个名为ChilKat 的库。找到了答案here。不幸的是,这在我的 x64 机器上不起作用。幸运的是,我们的服务器都是 x86 的,所以我们有更多时间来研究解决方法。

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多