Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#加密,将.der和.pem文件作为输入_C#_Encryption - Fatal编程技术网

c#加密,将.der和.pem文件作为输入

c#加密,将.der和.pem文件作为输入,c#,encryption,C#,Encryption,我是c#的新手。我被要求在将信息发布到外部URL之前对字符串进行加密。作为外部应用程序的输入,我得到的只是一个.der文件和一个.pem文件。他们要求我发送加密(字符串)信息,以便他们能够解密 我读了很多帖子,但没有得到关于如何解决这个问题的确切答案 我正在使用下面的代码片段读取.pem文件并创建证书。但在新的X509Certificate2(certBuffer)上;行向我抛出“找不到请求的对象”错误。我不确定我的方向是否正确。如果是,请帮助我解决问题。否则给我指路。提前谢谢 var

我是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));
    }
var pem=System.IO.File.ReadAllText(“C:\\Users\\bvarapr1\\Desktop\\fordsync\\public_qa.pem”);
字节[]certBuffer=GetBytesFromPEM(pem,公钥);
var证书=新的X509Certificate2(certBuffer);
RSACryptoServiceProvider=(RSACryptoServiceProvider)certificate.PrivateKey;
string testString=“DIGITALMOON”;
字符串encryptedVIN=RSAEnc(提供程序,测试字符串);
字节[]GetBytesFromPEM(字符串pemString,字符串段)
{
var header=String.Format(“----BEGIN{0}---”,节);
var footer=String.Format(“----END{0}---”,节);
var start=pemString.IndexOf(header,StringComparison.Ordinal)+header.Length;
var end=pemString.IndexOf(footer,start,StringComparison.Ordinal)-start;
如果(开始<0 | |结束<0)
{
返回null;
}
返回Convert.FromBase64String(pemString.Substring(start,end));
}

此代码适用于我,但您的PEM文件只需要包含公钥。我不确定您的公钥是如何生成的,但我使用了“openssl genrsa-out private_key.pem 1024”。然后,我使用“openssl rsa-in private_key.pem-pubout-out public_key.pem”导出公钥,以便在上面的代码中使用。
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();
}