RSA签名时是发方用私钥加密,用私钥rsa加解密c语言,但接收方不知道...

公钥与私钥,有那么复杂吗?
公钥与私钥,在使用公钥密码学加密与签名时,真的就很难选择吗?
&&& 这篇文章是第二版,因为第一版不幸地&&闲话少说,言归正传。
&&& 经常听到有人说,在使用公钥密码学加密与签名时,一定要知道是使用公钥还是使用私钥,否则容易闹笑话。可是,对于一个学过一点密码学的人来说,真的就那么难吗?下面就来讨论一下这个问题。
&&& 密码学中要使用Key,而在公钥密码学中,有两个Key,一个公钥PK(Public Key),一个私钥SK(Secret Key),其中公钥PK公开,任何人都可以查到,而私钥SK保密,理论上只应该有你一个人知道。这一点是与分组密码算法(DES,AES)不同的(DES的实现可以看我以前的一篇博文),因为在分组密码算法中,只有一个KEY,且是在通信双方共享的,并且需要保密。下面以公钥密码算法RSA为例(RSA的小数情况实现也可以看我的另一篇文章),来讲一讲在公钥密码学,加密与签名时,key的选择问题。
&&& 首先要说一说通信,通信自然要涉及通信双方,当然,你也可以自己和自己通信(如果你这时还加密签名的话,你这是闲得&&)。密码学的大师给了通信双方两个好听的名字A(lice),B(ob)。下面约定一下PK(A),PK(B)分别代表Alice和Bob的公钥,是完全公开的,任何人都可以查到;SK(A)为Alice的私钥,只有Alice自己知道,SK(B)为Bob的私钥,只有Bob一个人知道。下面从Bob的角度来讨论。
&&& 加密:
&&& 加密,为什么要加密?因为通信的双方使用的是公开的信道,而信道上是可能有窃听者的,如果使用明文传输消息,即不加密,那么窃听者就可以知道消息的内容了,如果你传输的是什么**消息的话,你就悲剧了。所以为防止消息被不应该知道的人知道,传输时要加密。
&&& 在公钥密码学中,一个消息M,在key1的控制下,经过密码算法,得到密文C,是为加密;而密文C,在另一个Key2的控制下,经过密码算法,可以得到对应的明文M,是为解密。其中一个是公钥PK,一个是私钥SK,这是与分组密码不同的。下面来说Bob要传输消息给Alice,该使用那个Key。这里使用枚举,这个办法很好用。总共用四个key。(你不会还想用其他人的key吧。。。)
&&& 1)使用PK(B)吗(自己的公钥)?这个,来分析分析。使用PK(B)加密的消息,只能使用对于的SK(B)来解密,而SK(B)只有你自己知道,Alice不知道,窃听者也不知道。使用这个Key的效果最好,别的人都不能知道消息的内容,窃听者也拿它没办法,但是,通信的另一方Alice也不知道消息的内容了,这样的通信就没有意义了。所以,否定掉。
&&& 2)使用SK(B)吗(自己的私钥)?我们来看看,使用SK(B)加密的消息,要使用PK(B)来加密。而PK(B)是公开的,Alice知道,恩,Alice可以解密消息了,这个可以吧!这个真的可以吗?正是因为PK(B)是公开的,Alice知道,窃听者也知道,所以Alice能解密,窃听者也能解密,所以根本就没有保密性。和明文传输没多大的差别了。这个一个悲剧的选择。Pass掉。
&&& 3)使用SK(A)吗(对方的私钥)?SK(A)是Alice的私钥,只有Alice知道,Bob不知道,这个不行。假设Alice将私钥偷偷告诉了你,这样你就可以使用了吧。原理和结局同2中的分析。同样&&
&&& 4)使用PK(A)吗(对方的公钥)?排除法告诉我们,只有这个可以选了,那就选它吧。原理什么的就不用讲了吧,大家也没兴趣的。不行,老夫子教导我们,知其然必知其所以然。我们要知道原理。好吧,讲一讲。使用PK(A)加密的消息,要使用SK(A)来解密,而SK(A)对方是知道的,所以消息是可以解密的;而又因为SK(A)只有Alice知道,别的人包括窃听者是不知道的,所以消息的保密性是可以保证的。满足要求。恩,终于弄懂了。
&&& 讲了这么多,口都渴了,喝口水了再来讲。。。。。。下面将签名。
&&& 签名:
&&& 签名,现实生活中,我们可以使用自己的笔迹来签名的。而电子世界呢?签名,这个是公钥密码学提供的而分组密码是无法与他比的特性。签名,为什么要签名?举个例子,假如你发送一条消息给银行,从你的账号中转1亿出去(反正是举例子,说这么大的数额也没什么关系),银行执行了这条消息,转了账,事后,你跟银行说,你没有转过账,要让银行赔偿,如果银行拿不出证据,那银行就悲剧了、破产了,而银行是可以拿出证据的,证据就在那条消息中,因为你对它签名了,而签名在法律上是有效的证据的。好吧。那么,Bob要对消息签名,他该使用哪个key?枚举法再次闪亮登场&&
&&& 1)使用PK(A)吗(对方的公钥)?假设可以的话,由于PK(A)是公开的,那么任何都是可以伪造你的签名的,你的银行卡就爆了。。。
&&& 2)使用SK(A)吗(对方是私钥)?同样这个你是不知道的。就是对方告诉了你,还是有问题的,因为这个和你的另一个key不匹配,签名是不能验证的,这个问题同样出现在1中。所以,不妥。。。
&&& 3)使用PK(B)吗(自己的公钥)?同样有问题,第一,原理同1,由于是公开的,任何人都可以伪造,银行卡再次爆掉了;第二,原理同2,要验证,就需要使用你的另一个key,即你的私钥,而这个只有你自己知道,所以签名无法验证。这又是一个失败的例子。。。
&&& 4)私钥SK(B)吗(自己的私钥)?还是说说原理吧。签名要使用唯一能确认是你的东西来签名,譬如笔迹。因为SK(B)只有你自己知道,所以满足要求的;其次,使用SK(B)签名的东西,是可以用PK(B)验证的,因为它是公开的。所以也满足要求。Jackpot!
&&& 写了这么多,终于写完了。由于昨天的失误,今天算是重新敲了一遍,我还以为只有几百字呢,没想到竟有2k多的字。不过上面的都是废话,下面来总结一下,接下来的这句才是重点。
&&& 在公钥密码学中,加密使用对方的公钥,签名使用自己的私钥。
&&& 废话完了,昨天写的是洗洗睡了,今天就写个,喝水去了!
摘自 专注AndyDHU
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。数字签名,公钥,私钥有什么区别_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
4页¥2.002页¥1.009页免费6页¥3.003页¥1.00 3页¥2.001页免费2页免费1页免费2页免费
喜欢此文档的还喜欢2页免费15页免费7页免费21页免费5页2下载券
数字签名,公钥,私钥有什么区别|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢私钥与公钥加密在.NET编程中的应用探讨--天龙八部搜服网
最新天龙八部网
私钥与公钥加密在.NET编程中的应用探讨
作者:本站编辑 来源:本站原创 点击量:0 更新时间:昨天
    数据在网络传输过程中的保密性是网络安全中重点要考虑的问题之一,数据加密与解密是解决这一问题较好的办法。该文分析了私钥加密与公钥加密的相关算法.并就其在.编程中的应用方法进行详细阐述,对其优劣进行了有益分析与探讨。关键词:私钥加密;公钥加密;类;中图分类号:3文献标识码:文章编号:一?8183?03网络数据传输对安全的要求较高。网络上数据传输不安全的因素有二:一是信息可能被网络上侦听的人获得,数据信息泄露;二是信息可能被修改后传递到接收方,数据信息被篡改。解决的办法就是在传输数据前对数据进行加密,接收方接收到加密的数据后再进行解密处理.从而保证数据的安全性。本文讨论数据加密解密的两种常用方法?私钥与公钥加密相关算法,并对其在.编程巾的应用进行阐述。对其应用场合与优劣进行了分析和探讨。私钥加密1.1概述私钥加密,也称为对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密。和是私钥加密的两种实现。和晰基本算法一致,只是7哺算法提供的位数更多,加密可靠性更高。使用的密钥为8字节,初始向量也是8字节。使用2该游戏此点推荐了4字节的,初始向量也是8字节。  两种算法都是以8字节为一个块进行加密,一个数据块一个数据块的加密,一个8字节的明文加密后的密文也是8字节。如果明文长度不为8字节的整数倍,添加值为0的字节凑满8字节整数倍。  所以加密后的密文长度一定为8字节的整数倍。  私钥加密算法的优点是保密强度高.加、解密速度快,适合加密大量数据。攻击者如果对加密后的数据进行破译,惟一的办法就是对每个可能的密钥执行穷举搜索。而采用这种加密技术,即使使片最快的计算机执行这种搜索。  耗费的时『日也相当长。如果使较大的街钥,破译将会更加困难。在实际,电用巾,加密数据采用的密钥一般都有时效性,比如几天更换一次密钥和,如果攻击者采用穷举法试图破译加密后的数据。等到好不容易试出密钥,加密者早已采用新的密钥对网络中传输的数据进行加密了,因此利用穷举搜索的方法破译加密后的数据实际上是没有意义的。算法加密与解密算法过程如图所示。1.2在.编程中的应用在.中,公共语言运行时(图1算法加、解密过程图)使用面向流的设计实现私钥加密,该设计的核心是卯-,实现即的任何被加密的对象都可以和实现的任何对象链接起来。实现对称加密算法的类主要有:?加街算法(可用密钥长度为64位)宓钼翟要害;薏翼裟等跏“?删加密算法可用表1,、,类常用的属性与方法密钥长度为128?192位)一一二。”:二。::::::::二二::二二:::为了使用流进行加密解密处理,.还提供了枷类,该类用于定义将数据流链接至吁加密转换的流。实现的任何加密对象均可以和实现陀的任何对象链接起来.岗此一个对象的流式处理输出可以馈送到另一个对象的输入.而不需要分别存储中间结果,即不需要存储第一个对象的输出。收稿日期:作者简介:李伟(1977一),男,四川巴中人,硕士研究生,主要从事计算机基础应用研究;曹志英(1979一),女,四川成都人,本科,成都职业技术学院财经学院老师。本栏目责任编辑:冯蕾?-?-?一结囊讯厦安全?8183唧妇珩'刚妒『酣帅蝴电雎知识与技术编程过程中使用的主要代码:?)个=哟;,随机生成密钥和仞始化向量Ⅳ.;.0;.=..8.甙.);,得到加密后的字节”=).(饥.,.Ⅳ);显示加密后的字符串.=.'8.(唧);“镰密2(呻8,.,.聊;显示解密后的字符串.=;2公钥加密第6卷第29期(2010年10月)2.1私钥加密存在的问题私钥加密的传奇网游缺点是双方使用相同的密钥和Ⅳ进行加密、解密。由于接收方必须知道密钥和才能解密数据。因此发送方需要先将密钥和传递给接收方。这就有一个问题,如果攻击者截获了密钥和,也就等于知道了如何解密数据12.2公钥加密公钥加密也叫不对称加密,这种技术使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。不对称加密产生的主要原因有两个,一是对称加密的密钥分配问题.另一个是由于对数字签名的需求。不对称加密使用一个需要保密的私钥和一个可以对任何人公开的公钥,即使用公钥,私钥对来加密和解密数据。公钥和私钥都在数学上相关联,用公钥加密的数据只能用私钥解密,.饭之,用私钥加密的数据只能用公钥解密。  两个密钥对于通信会话都是惟一的。公钥加密算法也称为不对称算法,原冈是需要用一个密钥加密数据而需要用另一个密钥来解密数据。私钥加密算法使用长度日变的缓冲区,而公钥加密算法使用固定大小的缓冲区,无法像私钥算法那样将数据链接起来成为流,因此无法使用与对称操作相同的流模型。这是编写程序时必须注意的问题。为什么不对称加密更不容易被攻击呢。关键在于对私钥的管理上。在对称加密中,发送方必须先将解密密钥传递给接收方,接收方才能解密。如果避免通过不安全的网络传递私钥,不就解决这个问题了吗。不对称☆密的关键就在于此。使用不对称加密算法加密数据后,私钥不是发送方传递给接收方的,而是接收方先生成?个公钥,私钥对,在接收被加密的数据前,先将该公钥传递给发送方;从公钥推导出私钥是不可能的,所以不怕通过网络传递时被攻击者截获公钥。  发送方得到此公钥后,使用此公钥加密数据,再将加密后的数据通过网络传递给接收方;接收方收到加密后的数据后.再用私钥进行解密。由于没有传递私钥,从而保证了数据安全性。虽然公钥加密解决了用对称加密传递消息必须传递密钥的问题,但是由于公钥加密无法使用流进行处理,因此与对称加密相比效率较低,不适用于加密大量数据的场合。  在实际应用中,一般将两种加密方法配合使用。  其基本思想是:用公钥加密算法加密私钥加密算法的密钥,用私钥加密算法加密实际数据。具体设计思路可以简单描述为:和相互传递加密的数据前,首先生成一个公钥加密算法使用的公钥,私钥对。假定公钥为,私钥为,然后将公钥通过网络传递给;接收到此公钥后,根据此公钥初始化公钥加密对象,并用此对象加密使用私钥加密算法的密钥传奇之,并将加密后的密钥通过网络传递给;这样,和都有了一个共同使用的私钥加密的密钥,然后双方用此密钥加密数据,并将加密后的数据传递给对方,对方收到加密后的数据后,再用密钥解密数据。通过这种方式,在不安全的网络上传递加密后的数据时,虽然攻击者可以截获公钥,但是由于用公钥加密的数据只能用私钥解密,而私钥并没有通过网络传递,因此攻击者无法通过公钥破译加密后的密钥,因此也无法破译加密的消息。在实际应用中,一般使用协议通过网络传奇游戏装备传输数据。  对于比较重要的数据,必须进行加密解密处理。一般实现方案为:1)传输双方均各自生成一个公钥私钥对。21通过协议交换公钥。31双方各自生成一个对称加密用的私钥,并使用对方的公钥加密新创建的私钥。41双方将加密后的对称加密用的私钥发送给对方,以便对方利用此私钥解密。51双方使用对称加密进行会话。公钥加密数据网络传输过程为:在通过网络传输数据之前,发送方先读取一个数据块,进行加密,并将加密后的数据保存在内存流中。然后计算加密后的数据长度,最后将数据长度和内存流中的数据转换成字节序列传奇的。通过网络流发送给接收方;接收方接收数据时,首先从网络流中获取要读取的加密后的数据量的大小值,然后根据获取的要读取的字节数,从网络流中读取数据,并解密这些数据到内存流中。再把内存流中的数据转换成字节序列,从而形成原始8184?舟铬囊讯厦安垒-?-?-?本栏目责任编辑:冯蕾第6卷第29期(2010年10月)数据。  对于较大的不能一次传输的数据.循环执行这个过程,直到数据全部传输完毕。2.3公钥加密在.编程中的应用.提供以下实现不对称加密算法的类:以类为例在社编程过程中的应用代码为:,使用默认密钥创建卯对象=0;,显示包含公钥私钥对的表示形式,如果只显示公钥,将参数改为材即可0,=.;,将被加密的字符串转换为字节数组=.8.陆(.);∥得到加密后的字节数组=.(卯,);.=.8.(目;,得到解密后的字节数组=.(,越);.=.8.(协);(印玎),;参考文献:111何明星,范平志.新一代私钥加密标准进展与评述叨.计算机应用研究,2001(10).2秦志光.密码算法的现状和发展研究.计算机应用,2004(2).[3微软公司.面向.的应用程序设计.北京:高等教育电子音像出版社,2009.4罗平,孙永东,刘唯义.两种快速高效公钥算法田.大庆石油学院学报,2002,(4).5马俊.网络应用高级编程.北京:人民邮电出版社,2008,1.本栏目责任编辑:冯蕾咖(胁训蜘,死酌04鲫电脑知识彳技术-?-?网络通讯盛大传奇大全安全?8185私钥与公钥加密在.编程中的应用探讨作者:李伟,曹志英作者单位:成都职业技术学院,计算机系,四川,成都,610041刊名:电脑知识与技术英文刊名:年,卷(期):)参考文献(5条)1.马俊网络应用高级编程20082.罗平;孙永东;刘唯义两种快速高效公钥算法[期刊论文]-大庆石油学院学报.微软公司面向.的应用程序设计20094.秦志光密码算法的现状和发展研究[期刊论文]-计算机应用.何明星;范平志新一代私钥加密标准进展与评述[期刊论文]-计算机应用研究2001(10)。
相关文章推荐导读:公钥和私钥的核心就是加密和解密的密码不一样,一个是公钥,另一个是私钥,这个机制也叫非对称密码机制。
和原来的对称密码不同,原来双方使用同一个密码,除了自己保存外,如果跟别人通讯,则要求对方也有同样的密码,就存在密码泄漏的可能;但对于非对称密码,由于加密和解密密码不一样,所以可以将其中一个密码完全公开,只要保证自己手上的另一个密码秘密性就可以了。可以对外公开的密码就是公钥,自己的就是私钥,公钥和私钥是相对的,两者本身并没有规定哪一个必须是公钥或私钥。
对于两台机器的加密传输,接收方R可以生成自己的私钥和公钥,然后发送方S保存了R的公钥,用它加密数据后发送给R,R收到后使用自己的私钥解密,从而得到内容。R如果有数据要返回给S,则使用R自己的私钥加密,S收到后用原来保存的R的公钥解密。
在Linux下可用下面的命令生成一对密码,可分别作为公钥和密钥。
ssh-keygen -t rsa -C &&
在用户目录下生成.ssh目录,目录下可见生成的一对密码文件:
id_rsa & & & & &// 密钥文件
id_rsa.pub & // 公钥文件
一般还可以为密钥文件的使用生成一个passphase,就是为了保护id_rsa使用的额外的密码。
公钥和私钥除了用在加密传输之外,也用在数字证书上。就是为了防止传输的数据中途被改变。
1. 发送方S通过算法比如HASH,给数据生成一个摘要,然后对摘要进行非对称加密;
2.&接着发送方S将数据以及摘要一起发给接收方(中间还会加密);
3. 接收方S拿到数据后,对摘要进行非对称解密(和S的非对称加密密钥配对);
4. 然后接收方S再将数据本身进行HASH,生成本地摘要,和解出来的摘要对比,查看是否一样,从而判断数据有否在中途被修改。
有一片很好的文章:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:16885次
排名:千里之外
原创:14篇
(1)(2)(11)

我要回帖

更多关于 rsa在线解密 的文章

 

随机推荐