对称加密的缺点是双方使用相同的密钥和IV进行加密、解密。由于接收方必须知道密钥和IV才能解密数据,因此发送方需要先将密钥和IV传递给接收方。这就 有一个问题,如果攻击者截获了密钥和IV,也就等于知道了如何解密数据!如何保证发送方传递给接收方的密钥和IV不被攻击者截获并破译呢?

源码:http://www.jinhusns.com/Products/Download/?type=xcj

      不对称加密也叫公钥加密,这种技术使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。不对称加密产生的主要原因有两个,一是对称加密的密钥分配问题,另一个是由于对数字签名的需求。
不对称加密使用一个需要保密的私钥和一个可以对任何人公开的公钥,即使用公钥/私钥对来加密和解密数据。公钥和私钥都在数学上相关联,用公钥加 密的数据只能用私钥解密,反之,用私钥加密的数据只能用公钥解密。两个密钥对于通信会话都是惟一的。公钥加密算法也称为不对称算法,原因是需要用一个密钥 加密数据而需要用另一个密钥来解密数据
      私钥加密算法使用长度可变的缓冲区,而公钥加密算法使用固定大小的缓冲区,无法像私钥算法那样将数据链接起来成为流,因此无法使用与对称操作相同的流模型。这是编写程序时必须注意的问题。
      为什么不对称加密更不容易被攻击呢?关键在于对私钥的管理上。在对称加密中,发送方必须先将解密密钥传递给接收方,接收方才能解密。如果避免通过不安全的网络传递私钥,不就解决这个问题了吗?
      不对称加密的关键就在于此。使用不对称加密算法加密数据后,私钥不是发送方传递给接收方的,而是接收方先生成一个公钥/私钥对,在接收被加密的数据前,先 将该公钥传递给发送方;注意,从公钥推导出私钥是不可能的,所以不怕通过网络传递时被攻击者截获公钥。发送方得到此公钥后,使用此公钥加密数据,再将加密 后的数据通过网络传递给接收方;接收方收到加密后的数据后,再用私钥进行解密。由于没有传递私钥,从而保证了数据安全性。
 
.NET Framework提供以下实现不对称加密算法的类:
•DSACryptoServiceProvider 
•RSACryptoServiceProvider 

RSACryptoServiceProvider类使用加密服务提供程序提供的RSA算法实现不对称加密和解密。加密服务提供程序 CSP(Cryptographic Service Provider)是微软在Windows操作系统中内置的加密处理模块,RSACryptoServiceProvider类已经对其提供的相关接口和 参数进行了封装,所以即使我们不知道CSP内部是如何实现的,也一样可以使用其提供的功能

RSA不对称加密例子

        private void buttonOK_Click(object sender, EventArgs e)
        {
            //使用默认密钥创建RSACryptoServiceProvider对象
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            //显示包含公钥/私钥对的XML表示形式,如果只显示公钥,将参数改为false即可
            richTextBoxKeys.Text = rsa.ToXmlString(true);//得到公钥/私钥对(实际没什么意义,一般情况下通过得到公钥发送给服务端,服务端用FromXmlString接收公钥,进行加密后传输)
            //将被加密的字符串转换为字节数组
            byte[] dataToEncrypt = Encoding.UTF8.GetBytes(textBoxInput.Text);
            try
            {
                //得到加密后的字节数组
                byte[] encryptedData = rsa.Encrypt(dataToEncrypt, false);
                textBoxEncrypt.Text = Encoding.UTF8.GetString(encryptedData);
                //得到解密后的字节数组
                byte[] decryptedData = rsa.Decrypt(encryptedData, false);
                textBoxDecrypt.Text = Encoding.UTF8.GetString(decryptedData);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

C#不对称加密的更多相关文章

  1. 个人理解c#对称加密 非对称加密 散列算法的应用场景

    c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 ...

  2. .NET中的DES对称加密

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法.一般密码长度为8个字节,其中56位加密密钥, ...

  3. AES —— JAVA中对称加密和解密

    package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...

  4. 介绍对称加密的另一个算法——PBE

    除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法 ...

  5. iOS CommonCrypto 对称加密 AES ecb,cbc

    CommonCrypto 为苹果提供的系统加密接口,支持iOS 和 mac 开发: 不仅限于AES加密,提供的接口还支持其他DES,3DES,RC4,BLOWFISH等算法, 本文章主要讨论AES在i ...

  6. openssl evp 对称加密(AES_ecb,ccb)

    openssl evp 对称加密(AES_ecb,ccb) evp.h 封装了openssl常用密码学工具,以下主要说对称加密的接口 1. 如下使用 aes_256_ecb 模式的加密解密测试代码 u ...

  7. AES,RSA对称加密和非对称加密

    1.关于RSA加密机制:是非对称加密方式,两个钥,公钥和私钥,公钥用于加密数据,可以分享给其他用户,私钥可以用于解密用公钥加密的数据,关于安全问题是公钥泄露不会影响安全问题,公钥与私钥是一一对应的关系 ...

  8. TEA,XXTEA介绍,对称加密

    总结:在使用加密的时候,我们可以加入随机数,这样相同的明文,每次加密后得到不同的密文,同时可以在密文中加入密文有效期,控制密文的有效时间长度. 针对有的功能扩展使用,很好的思想. TEA对 64 位数 ...

  9. Java和.NET使用DES对称加密的区别

    Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Ja ...

随机推荐

  1. Linux服务器安装笔记 汇总

    系统 Ubuntu笔记:http://www.cnblogs.com/newsea/p/4746967.html CentOs笔记:http://www.cnblogs.com/newsea/p/47 ...

  2. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

  3. iOS开发系列--Objective-C之协议、代码块、分类

    概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,这一节将重点介绍ObjC中一些常用的语法特性.当然这些内容虽然和其他高级语言命名不一样,但 ...

  4. Angularjs学习---官方phonecat实例学习angularjs step0 step1

    接下来一系列的文章都是学习https://docs.angularjs.org/tutorial的笔记,主要学习的angular-phonecat项目的实现,来介绍angularjs的使用. 1.下载 ...

  5. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

  6. OPEN CASCADE Curve Continuity

    OPEN CASCADE Curve Continuity eryar@163.com Abstract. 设计一条复杂曲线时,出于设计和制造上的考虑,常常通过多段曲线组合而成,这就需要解决曲线段之间 ...

  7. 希尔排序及希尔排序java代码

    原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...

  8. mpi4py实践

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.概述 MPI(Message Passing Interface),消息传递接口,是一个标准化和轻便的能够运行在各种各样并行计算机上的消息传递 ...

  9. KNN算法

    1.算法讲解 KNN算法是一个最基本.最简单的有监督算法,基本思路就是给定一个样本,先通过距离计算,得到这个样本最近的topK个样本,然后根据这topK个样本的标签,投票决定给定样本的标签: 训练过程 ...

  10. MVC4做网站后台:用户管理 ——用户组 2、查看、修改、删除用户组

    查看用户组资料和修改用户组资料结合在一起,在用户组列表双击查看用户组资料,修改资料点保存可以保存用户组,点删除可以删除用户组. 先在UserGroupController中添加 action publ ...