码迷,mamicode.com
首页 > 编程语言 > 详细

加解密算法二:非对称加解密

时间:2015-06-02 11:01:32      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

  加密和解密使用不同的密钥的一类加密算法。这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密);
相反,使用密钥B加密数据得到的密文,只有密钥A可以解密。这两个密钥分别称为私钥和公钥。私钥就是你个人保留,不能公开的密钥,而公钥则是公开给加解密操作的另一方的。
根据不同用途,对数据进行加密所使用的密钥也不相同(有时用公钥加密,私钥解密;有时相反用私钥加密,公钥解密)。非对称加密的代表算法是RSA算法。
  

    RSA算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。

    RSA算法实现主要分为三部分:公钥和私钥的产生、非对称加密和解密实现、数字签名和验证。

  

公钥和私钥的产生:

        string publickey, privatekey;
        RSACryptoServiceProvider rsaprovider;

        void Initial()
        {
            //声明一个RSA算法的实例,由RSACryptoServiceProvider类型的构造函数指定了密钥长度为1024位
            //实例化RSACryptoServiceProvider后,RSACryptoServiceProvider会自动生成密钥信息
            rsaprovider = new RSACryptoServiceProvider(1024);
            //将RSA算法的公钥导出到字符串PublicKey中,true 表示同时包含 RSA 公钥和私钥;false 表示仅包含公钥
            publickey = rsaprovider.ToXmlString(false);
            //将RSA算法的私钥导出到字符串PrivateKey中,true 表示同时包含 RSA 公钥和私钥;false 表示仅包含公钥
            privatekey = rsaprovider.ToXmlString(true);

        }

非对称加密和解密实现:

公钥加密,私钥解密(私钥加密、公钥解密算法一样):

      byte[] EncryptData(byte[] data)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
            //将公钥导入到RSA对象中,准备加密;
            rsa.FromXmlString(publickey);
            //对数据data进行加密,并返回加密结果;
            //第二个参数用来选择Padding的格式
            return rsa.Encrypt(data, false);
        }

        byte[] DecryptData(byte[] data)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
            //将私钥导入RSA中,准备解密;
            rsa.FromXmlString(privatekey);
            //对数据进行解密,并返回解密结果;
            return rsa.Decrypt(data, false);
        }

 

加解密算法二:非对称加解密

标签:

原文地址:http://www.cnblogs.com/yaosuc/p/4545699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!