在.NET中使用RSA算法进行数据加密和签名,很多时候,我们需要重复的使用一组密钥,因此就需要将这组密钥保存起来。接下来,我给大家介绍3种在.Net中保存密钥的方法。
第一种方法:将密钥导出保存为本地文件。
首先要强调的是,出于安全性考虑,不建议使用这种方法保存私钥,如果使用,请在密钥导出的时候只导出公钥。
RSACryptoServiceProvider对象提供了一个ToXmlString(bool includePrivateParameters)方法,我们可以使用此方法将密钥导出为一个xml格式的string,然后将其保存到一个文件中,这个方法的参数为true时会导出私钥,否则不导出私钥。需要的时候,我们可以使用FromXmlString(string xmlString)方法,将保存的密钥信息加载到RSACryptoServiceProvider对象中。下面的代码实现了导出和导入操作:
1: static void SaveKey2File(RSACryptoServiceProvider rsa, string fileName) 2: { 3: FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); 4: string key = rsa.ToXmlString(false); 5: fs.Write(Encoding.UTF8.GetBytes(key), 0, key.Length); 6: fs.Close(); 7: fs.Dispose(); 8: } 9: 10: static void LoadKeyFromFile(RSACryptoServiceProvider rsa, string fileName) 11: { 12: FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 13: byte[] data = new byte[fs.Length]; 14: fs.Read(data, 0, (int)fs.Length); 15: fs.Close(); 16: fs.Dispose(); 17: rsa.FromXmlString(Encoding.UTF8.GetString(data)); 18: } |
实际的工作中,出于安全性考虑,很少会用的上面的方法保存密钥,但如果你想看看密钥长什么样子,这个方法还是挺有用的~~