使用.NET中的私钥对文件进行签名

Rir*_*iri 6 .net encryption

如何使用.NET对文件进行签名,如何在读取后验证生成的密钥是否为有效密钥?

我的目标是拥有一个带有一些值和生成密钥的文本文件.然后,我希望能够检查文件中生成的密钥,以便在我将文件发送给客户后,没有人篡改文件中的值.

更新:在这里找到答案的一些帮助.

Dav*_*nde 6

试试这个:

class Program
{
    static byte[] Sign(string message, RSAParameters key)
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.ImportParameters(key);

        byte[] toSign = Encoding.Unicode.GetBytes(message);
        return rsa.SignData(toSign, "SHA1");
    }

    static bool Verify(string message, byte[] signature, RSAParameters key)
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.ImportParameters(key);

        byte[] toVerify = Encoding.Unicode.GetBytes(message);
        return rsa.VerifyData(toVerify, "SHA1", signature);
    }

    static void Main(string[] args)
    {
        string message = "Let's sign this message.";

        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); // Creates a new RANDOM key.
        RSAParameters privatekey = rsa.ExportParameters(true);
        RSAParameters publickey = rsa.ExportParameters(false);

        byte[] signature = Sign(message, privatekey);

        if (Verify(message, signature, publickey))
        {
            Console.WriteLine("It worked!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

重要的是要注意每次启动此程序时都会生成一个新的公钥/私钥对.为了做你想做的事,你需要在两端使用它之前保存公钥/私钥对.您的公钥是唯一需要验证的内容,因此您的私钥不会发布到客户端.

您可能需要查看ExportParameters或ExportCspBlob以完成保存/加载公钥/私钥对.


jal*_*plo -2

你有两种可能性:

  • 一次位于项目属性的“签名”选项上。
  • 第二个是修改AssemblyInfo.cs文件并添加命令以使用生成的 sn:[assembly: AssemblyKeyFile("..\\..\\SN_Generated.snk")]

  • 我不想签署集会。我想在文件中生成一个值以避免篡改该文件中的值。 (2认同)