如何使用.NET对文件进行签名,如何在读取后验证生成的密钥是否为有效密钥?
我的目标是拥有一个带有一些值和生成密钥的文本文件.然后,我希望能够检查文件中生成的密钥,以便在我将文件发送给客户后,没有人篡改文件中的值.
更新:在这里找到答案的一些帮助.
试试这个:
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以完成保存/加载公钥/私钥对.