关于非对称加密的一个疑惑! 分不多了,请见谅。(30分)

  • 主题发起人 主题发起人 crazymoon
  • 开始时间 开始时间
C

crazymoon

Unregistered / Unconfirmed
GUEST, unregistred user!
一直从原理上理解非对称算法的作用。
①、公钥加密,可以用私钥解密。可以实现传输过程中被人截获也不怕丢失信息。
②、私钥加密,可以用公钥解密。
③、数字签名,验证其未被修改。证明身份。
PubKeyEncode(PubKey,E,N) E,N构成公钥
PrivateKeyEncode(PubKey,D,N) D,N构成私钥
近几日研究了一下RSA,却发现这样的问题:
可以数字签名,可以公钥加密,私钥解密。
但是 要私钥加密,用公钥解密,却做不到!
查了一下网上资料,讲原理的多,讲实例的少,顶多也就是说明数字签名的过程,
有人说,用私钥加密的数据,必须要同时有公钥和私钥才能解密。验证了一下,好像是这样。但如果对方有私钥,加密又有什么用?
但我要的功能就是私钥加密,用公钥解密。不知谁能告诉我怎么用?或者有什么其他的
方法、算法实现私钥加密,用公钥解密
 
非对称加密算法当然是用私钥加密,用配对的公钥解密了。RSA加密体制的机理是基于数学对于大素数乘积分解的困难程度来实现加密的。具体原理是这样的:我们可以利用计算机很容易地找到两个指定位数的大素数(例如:两个128位的大素数),然后仍然十分容易地得到他们的乘积;然后用这两个大素数作为加密密钥,用他们的乘积作为解密密钥。因为寻找两个大素数并求出其乘积在当代计算机环境下是相当便捷和容易的,然而由两个大素数的乘积分解得到两个大素数是十分困难的(几乎是不可能完成的),所以就可以利用该原理来加密数据并进行数字签名了,因为该方法具有严格的数学理论基础,所以该加密方法只要大素数的位数选择的足够大,那么可以说加密过的数据是完全安全的。
 
签名和加密不是一回事,签名只是证实文件来源的真实性,是一种摘要算法
 
To Johnny_du:
原理上如此,但RSA在实际上好像不行。
做过例子的才知道。
用过的请留言。没有用过的就不用说了。
参见 http://topic.csdn.net/t/20040902/10/3332445.html
 
非对称加密算法当然是用私钥加密,用配对的公钥解密了。RSA加密体制的机理是基于数学对于大素数乘积分解的困难程度来实现加密的。具体原理是这样的:我们可以利用计算机很容易地找到两个指定位数的大素数(例如:两个128位的大素数),然后仍然十分容易地得到他们的乘积;然后用这两个大素数作为加密密钥,用他们的乘积作为解密密钥。因为寻找两个大素数并求出其乘积在当代计算机环境下是相当便捷和容易的,然而由两个大素数的乘积分解得到两个大素数是十分困难的(几乎是不可能完成的),所以就可以利用该原理来加密数据并进行数字签名了,因为该方法具有严格的数学理论基础,所以该加密方法只要大素数的位数选择的足够大,那么可以说加密过的数据是完全安全的。并且解密过程无需加密的密钥(从我上述对加密原理的阐述也可以得知,当然拥有加密密钥无疑可以得出解密密钥。但是由解密密钥不能推得加密密钥,并且解密过程可以脱离加密密钥而完成)
 
给你一个实际例子

原理:明文以分组为单位进行加密,每个分组的二进制值均小于n。在实际应用中,分组
的大小是k位,其中2k<n<=2k+1。对明文分组M和密文分组C,加密和解密过程如下:
C=Me mod n
M=Cd mod n=(Me)d mod n
其中公钥为KU={e,n},私钥为KR={d,n}.该算法要能用做公钥加密,必须满足下列条件:
可以找到e,d和n,使得对所有M<n,有Med=M mod n
对所有M<,计算Me和Cd是比较容易的.
由e和n确定d不可行的.
密钥产生过程:
随机选两个素数p,q
计算系统模N=p.q ,注意到:ф(N)=(p-1).(q-10
随机选一个加密密钥e:满足1<e<ф(N);gcd(e, ф(N))=1即互素
求解以下公式找解密密钥d:
e.d=1 mod ф(N) and 0<=d<=N 即(e.d) mod ф(N)=1
发布加密密钥KU={e,N},保密解密密钥KR={d,N}
RSA例子-密钥生成
1.选择素数:p=17 和q=11
2.计算N = pq=17×11=187
3.计算ø(N)=(p–1)(q-1)=16×10=160
4.选择e:gcd(e,160)=1; 选择e=7
5.决定d:de=1 mod 160并且d < 160d=23因为23×7=161= 10×160+1
6.发布公钥KU={7,187}
7.保密私钥KR={23,187}
对于消息M = 88(88<187)
•加密:
C = 887mod 187 = 11
•解密:
M = 1123mod 187 = 88
 
最后有点乱
其实是88的7次方 mod 187=11,11的23次方mod 187得88
公钥和私钥是可以交换的。
你也可以验证一下,其中最基础的就是原理就是单向陷门函数,基于大数的因式分解原理
 
6.发布公钥KU={7,187} //e,n
7.保密私钥KR={23,187} //d,n

公钥和私钥如何交换?
把E,N作为私钥,D,N作公钥?
可是,N是要发布的,而e一般是=65537的?
 
呃,RSA发布的时候一般要发布两个,就是说公、私钥都是有两个参数的
给个简单点的例子给你吧
如最开始选择素数 5和7作为随机素数
他们的乘积35将作为发布的一个参数。
那么他们的欧拉结果为 (5-1)*(7-1)=24
如果选择素数{5,35}作为私钥,那么可以推导出5*5=24+1
这样发布的公钥也就是{5,35}
这里的公钥和私钥是完全相同的,都是{5,35}

公私钥根本不需要交换的,公钥是大家都可以知道的,私钥是个人独有的,何必交换
 
公钥KU={7,187} //e,n
私钥KR={23,187} //d,n

公钥和私钥如何交换?
把E,N作为私钥,D,N作公钥?
可是,N是要发布的,而e一般是=65537的?
可否这样理解,将E取值作为私钥,
并且由N,D无法推出e.
 
后退
顶部