如何使用.NET对文件进行签名,如何在阅读后验证生成的密钥是否有效?
我的目标是让文本文件包含一些值和生成的密钥。然后,我希望能够检查文件中生成的密钥,以便在我将文件发送给客户后,没有人篡改文件中的值。
更新: 在答案的帮助下找到它here。
答案 0 :(得分: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!");
}
}
}
重要的是要注意每次启动此程序时都会生成一个新的公钥/私钥对。为了做你想做的事,你需要在两端使用它之前保存公钥/私钥对。您的公钥是唯一需要验证的,因此您的私钥不会发布到客户端。
您可能需要查看ExportParameters或ExportCspBlob以完成保存/加载公钥/私钥对。
答案 1 :(得分:3)
如果你想签署一个集会,jaloplo给出了解决方案。
如果要签署程序创建的某些文件,请查看System.Security.Cryptography命名空间中的DSACryptoServiceProvider class。
答案 2 :(得分:-2)
您有两种可能性:
AssemblyInfo.cs
文件并添加命令以使用生成的sn:[assembly: AssemblyKeyFile("..\\..\\SN_Generated.snk")]