c#encryption,得到.der和.pem文件作为输入

use*_*959 5 c# encryption

我是c#的新手.在将该信息发布到外部URL之前,我被要求加密字符串.我从该外部应用程序获得的所有输入都是.der文件和.pem文件.他们让我发送加密的(字符串)信息,以便他们可以解密.

我已经阅读了很多帖子,但无法得到关于如何解决这个问题的确切答案.

我使用下面的代码片段来读取.pem文件并创建证书.但是在新的X509Certificate2(certBuffer)上; 行抛出一个"无法找到请求的对象"错误.我不确定我是否朝着正确的方向前进.如果是,请帮我弄清楚问题.否则告诉我一个方法.提前致谢!

    var pem = System.IO.File.ReadAllText("C:\\Users\\bvarapr1\\Desktop\\fordsync\\public_qa.pem");
    byte[] certBuffer = GetBytesFromPEM(pem, "PUBLIC KEY");
    var certificate = new X509Certificate2( certBuffer );            
    RSACryptoServiceProvider provider = (RSACryptoServiceProvider)certificate.PrivateKey;
    string testString = "DIGITALMOON";
    string encryptedVIN = RSAEnc(provider, testString);

    byte[] GetBytesFromPEM(string pemString, string section)
    {
        var header = String.Format("-----BEGIN {0}-----", section);
        var footer = String.Format("-----END {0}-----", section);

        var start = pemString.IndexOf(header, StringComparison.Ordinal) + header.Length;
        var end = pemString.IndexOf(footer, start, StringComparison.Ordinal) - start;

        if (start < 0 || end < 0)
        {
            return null;
        }

        return Convert.FromBase64String(pemString.Substring(start, end));
    }
Run Code Online (Sandbox Code Playgroud)

Jac*_*cob 9

static void Main(string[] args)
{
    System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
    System.Security.Cryptography.RSAParameters rsaParam = rsa.ExportParameters(false);
    rsaParam.Modulus = Convert.FromBase64String(System.IO.File.ReadAllText(@"C:\keys\public_key.pem").Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", ""));
    rsa.ImportParameters(rsaParam);

    string msg = "This is a test.";
    byte[] encValue = rsa.Encrypt(Encoding.UTF8.GetBytes(msg), false);

    Console.WriteLine("Message Before Encryption: " + msg);
    Console.WriteLine("Encrypted Message:\r\n" + Convert.ToBase64String(encValue));

    Console.WriteLine("\r\nPress any key to exit.");
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

  • 此代码适用于我,但您的PEM文件只需要包含公钥.我不确定你的公钥是如何生成的,但是我使用了"openssl genrsa -out private_key.pem 1024".然后我使用"openssl rsa -in private_key.pem -poutout -out public_key.pem"导出公钥,以便在上面的代码中使用. (2认同)