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

 

 
posted @ 2017-05-03 09:29  秒杀5S  阅读(460)  评论(0编辑  收藏  举报