RSA非对称加密算法
基本定义:
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
数据加解密过程:
数据发送方使用数据接收方发放的公钥对发送数据进行RSA加密,生成的密文发送给数据接收方;
数据接收方使用公钥对应的私钥对密文进行RSA解密,得到明文信息.
数据是以密文形式传输的,即使密文被截获,想要破解得到对应的明文是几乎不可能的(这涉及到数论的相关理论,不予延伸).
破解难度主要体现在两点:
1.破解密文需要对应的私钥,而私钥的长度有1024、2048、3072等,因此暴力破解是不可行的;
2.虽然解密的私钥是由加密公钥解决的(公钥,私钥组成一个密钥对),但是却不能通过公钥推导计算出对应的私钥.
3.RSA使用公钥加密数据,得到的密文都是不同的,因此无法像破解MD5一样穷举出对应的明文内容.
C#代码实现的加解密:
/// <summary> /// RSA 加密 /// </summary> /// <param name="source">需加密的数据</param> /// <param name="publicKey">公钥</param> /// <returns></returns> public static string EncryptRsa(string source, string publicKey) { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { rsa.FromXmlString(publicKey); var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), true); return Convert.ToBase64String(cipherbytes); } } /// <summary> /// RSA解密 /// </summary> /// <param name="source">需解密的数据</param> /// <param name="privateKey">私钥</param> /// <returns></returns> public static string DecryptRsa(string source, string privateKey) { using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { rsa.FromXmlString(privateKey); var cipherbytes = rsa.Decrypt(Convert.FromBase64String(source), true); return Encoding.UTF8.GetString(cipherbytes); } }
扩展阅读: http://blog.csdn.net/lvxiangan/article/details/45487943