先明确一下概念:
公钥加密私钥解密, 没问题,也可以说是 "公共密钥加密系统 "
私钥加密公钥解密,一般不这么说,应叫 "私钥签名,公钥验证 ",也可以说是“公共密钥签名系统”
再来说一下 "公共密钥签名系统 "目的:(如果晕就多看几遍,这个没搞清,后面的代码就更晕)
A欲传(信息)给B,但又怕B不确信该信息是A发的。
1.A选计算(信息)的HASH值,如用MD5方式计算,得到:[MD5(信息)]
2.然后用自已的私钥加密HASH值,得到:[私钥(MD5(信息))]
3.最后将信息与密文一起传给B:传给B:[(信息) + 私钥(MD5(信息))]
B接到 :[(信息) + 私钥(MD5(信息))]
1.先用相同的HASH算法算出(信息)的HASH值,这里也使用MD5方式
得到: [MD5(信息)!]
2. 再用A的公钥解密 [ 私钥(MD5(信息))]
[公钥(私钥(MD5(信息)))] = [(MD5(信息)]
如能解开,证明该 [ 私钥(MD5(信息))]是A发送的
3.再比效[MD5(信息)!]与[(MD5(信息)]
如果相同,表示(信息)在传递过程中没有被他人修改过
公钥加密私钥解密, 没问题,也可以说是 "公共密钥加密系统 "
私钥加密公钥解密,一般不这么说,应叫 "私钥签名,公钥验证 ",也可以说是“公共密钥签名系统”
再来说一下 "公共密钥签名系统 "目的:(如果晕就多看几遍,这个没搞清,后面的代码就更晕)
A欲传(信息)给B,但又怕B不确信该信息是A发的。
1.A选计算(信息)的HASH值,如用MD5方式计算,得到:[MD5(信息)]
2.然后用自已的私钥加密HASH值,得到:[私钥(MD5(信息))]
3.最后将信息与密文一起传给B:传给B:[(信息) + 私钥(MD5(信息))]
B接到 :[(信息) + 私钥(MD5(信息))]
1.先用相同的HASH算法算出(信息)的HASH值,这里也使用MD5方式
得到: [MD5(信息)!]
2. 再用A的公钥解密 [ 私钥(MD5(信息))]
[公钥(私钥(MD5(信息)))] = [(MD5(信息)]
如能解开,证明该 [ 私钥(MD5(信息))]是A发送的
3.再比效[MD5(信息)!]与[(MD5(信息)]
如果相同,表示(信息)在传递过程中没有被他人修改过
再补充一点,非对称密钥的目的是为了实现不对等的身份验证。加密算法在这里只是实现目的的一个手段。
他不适合大数据块的加密。这种方式还应该用对称密钥加密方法(如DES)
注意,我为何说这种方式不叫加密:因为A所发的(信息)至始到尾都是暴露的。
在个种模式下,任何人都可以看到(信息),也可以修改(信息)
但如果(信息)被修改了,B可以发现
所以 "公共密钥加密系统 "叫信封,如我们邮信时的信封,保证内容不被人看到
“公共密钥签名系统”叫手印,保证收到该信的人能确认发信人身份
如果要加/解密大段的数据,那么只能公钥加密,私钥解密。但是如果是做签名的话,就像wxwinter说的,用私钥加密签名,公钥验证是可以的。
来源:https://www.cnblogs.com/yecllsl/archive/2011/04/22/2025087.html