当前位置:编程学习 > JAVA >>

关于数字签名的菜鸟问题

今天看了那java数字签名的一些内容,关于公钥和私钥的,公钥是公开的,私钥是自己才有的,文件传送时,先用私钥加密,完了别人用公钥解密,能得到解密后的内容;
这里我想弱弱的问一下,公钥既然是公开的,那是不是大家都能去拿公钥解密,那跟没加密有什么区别呀,这样加密有什么用呢 数字签名 加密 解密 Java --------------------编程问答-------------------- 公钥并不是完全公开的 之所以叫公钥 是给需要解密的人员公开  --------------------编程问答-------------------- 数字签名是验证身份的吧!被截了就被劫了呗。 --------------------编程问答-------------------- 不对称加密有两种用法:
数字签名是指用私钥加密、公钥解密,用于防止冒名顶替
数字信封是指用公钥加密、私钥解密,用于防止内容泄密

打个比方,lz在合同上签名按手印,是防止合同内容泄露的么?
所以,数字签名本来就不是用来防止内容泄露
要防止内容泄露,应该用信封,就像你寄信用信封防止泄露一个道理 --------------------编程问答--------------------
引用 1 楼 zyrobert 的回复:
公钥并不是完全公开的 之所以叫公钥 是给需要解密的人员公开 


公钥确实是完全公开的,在任何场合下没有任何保密的必要 --------------------编程问答--------------------
引用 3 楼 owen1759 的回复:
不对称加密有两种用法:
数字签名是指用私钥加密、公钥解密,用于防止冒名顶替
数字信封是指用公钥加密、私钥解密,用于防止内容泄密

打个比方,lz在合同上签名按手印,是防止合同内容泄露的么?
所以,数字签名本来就不是用来防止内容泄露
要防止内容泄露,应该用信封,就像你寄信用信封防止泄露一个道理

谢谢回复,
我还想问下,那既然公钥完全公开,别人要是想冒名顶替的话,用公钥去解密就是拉,反正是公开的,这样怎么能防止冒名顶替呢 --------------------编程问答-------------------- 我的理解是:

比如A给B、C发送数据,A用私钥加密,B用公钥解密,C也可以用公钥解密,目的是验证数据是否是A发来的,就是说B或C接收的数据如果能用公钥解密(A的私钥加的密,A给的公钥肯定能解),那么数据肯定是A发来的,别人无法伪造(别人不知道A的私钥,所以无法加密,B或C的公钥肯定无法解密);

这就是A到B的校验,这是单向的,双向的就是B也有私钥,用私钥加密,A用B给的公钥解密,能解开就说明是B发来的,否则假的
--------------------编程问答-------------------- 很简单,A要给B发消息,A用B的公钥加密,B收到以后用自己所持有的私钥解密,由于B的公钥是公开的,任何人都可以把消息用B的公钥加密后发给B,而只有B持有自己的私钥能够解密

而至于楼上几位提到的数字签名这个场景,则是A用自己的私钥加密(通常是对消息的摘要加密),任何一个接收者收到这条消息后用A的公钥解密得到的消息摘要同消息本身是匹配的,就证明该条消息确实是由A发出的,由于只有A持有自己的私钥,别人自然是不能冒名顶替的了 --------------------编程问答--------------------
引用 5 楼 A289048093 的回复:
Quote: 引用 3 楼 owen1759 的回复:

不对称加密有两种用法:
数字签名是指用私钥加密、公钥解密,用于防止冒名顶替
数字信封是指用公钥加密、私钥解密,用于防止内容泄密

打个比方,lz在合同上签名按手印,是防止合同内容泄露的么?
所以,数字签名本来就不是用来防止内容泄露
要防止内容泄露,应该用信封,就像你寄信用信封防止泄露一个道理

谢谢回复,
我还想问下,那既然公钥完全公开,别人要是想冒名顶替的话,用公钥去解密就是拉,反正是公开的,这样怎么能防止冒名顶替呢


问题在于,即使别人能解密,怎么冒名顶替呢?就好像你在一张合同上按手印,即使你把合同贴在墙壁上所有人都能看到内容,别人就能冒充你在另一份(伪造的)合同上按上你的手印么?
数字签名是用于确保发件人不被冒充,不指定收件人
数字信封是用于确保收件人不被冒充,不指定发件人
如果要想确保发件人与收件人都不被冒充,只需两者联合使用即可:
例如A发信给B,将正文用A的私钥加密后再用B的公钥加密即可,B收到之后用B的私钥解密后再用A的公钥解密

说白了,不对称加密算法无论用在哪个用途,私钥都是作为私钥持有者的身份证明,公钥都是用于验证对方持有的私钥是不是真货的手段。就好像我有张身份证,身份证上写着此人叫“张三”,那么无论我是发信还是收信,都可以出示身份证证明我是“张三”不是别人。 --------------------编程问答-------------------- 今天在空间里面遇到个好友,在说这个东西,没看懂。他是这样说的,“假如有一天我折了,罪魁祸首的是公钥和私钥。”! --------------------编程问答-------------------- 应该是加密是公开的,解密是私有的。如RSA,是可以破解的,只是目前需要很长时间
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,