非对称加密(4).NET非对称加密实践2014-04-24非对称加密在理论上似乎比对称加密简单,但是在实际应用中的细节却复杂得多,为了能由浅入深地理解.NET中的非对称加密,本小节分步理解其中的细节。
非对称密钥当使用一个非对称加密类创建一个该类的实例的时候,构造函数会生成一个“公钥/私钥”对。我们可以选择是否保存该密钥和保存的方式。先从代码清单6-8的内容来熟悉下非对称密钥的密钥结构。代码清单6-8 输出非对称密钥
class Program{staticvoid Main(string[] args){RSACryptoServiceProvider rcp = new RSACryptoServiceProvider();RSAParameters parameter1 = rcp.ExportParameters(true);RSAParameters parameter2 = rcp.ExportParameters(false); WriteParameInfo(parameter1,"parameter1");WriteParameInfo(parameter2,"parameter2");Console.Read();}privatestaticvoid WriteParameInfo(RSAParameters parameter,string name){Console.WriteLine(name+".D:");Console.WriteLine(ConverBitTostring(parameter.D));Console.WriteLine(name+"DP:");Console.WriteLine(ConverBitTostring(parameter.DP));Console.WriteLine(name+".DQ");Console.WriteLine(ConverBitTostring(parameter.DQ));Console.WriteLine(name+".InverseQ");Console.WriteLine(ConverBitTostring(parameter.InverseQ));Console.WriteLine(name+".Modulus"); Console.WriteLine(ConverBitTostring(parameter.Modulus));Console.WriteLine(name+".P");Console.WriteLine(ConverBitTostring(parameter.P));Console.WriteLine(name+".Q"); Console.WriteLine(ConverBitTostring(parameter.Q));Console.WriteLine(name + ".Exponent");Console.WriteLine(ConverBitTostring(parameter.Exponent));} publicstaticstring ConverBitTostring(byte[] bytes){if (bytes == null){return"该值为空!";}else{StringBuilder sb = new StringBuilder();for (int i = 0; i < bytes.Length; i++){sb.Append(bytes[i].ToString());}return sb.ToString();}}}