先明确一下概念: 公钥加密私钥解密, 没问题,也可以说是 "公共密钥加密系统 " 私钥加密公钥解密,一般不这么说,应叫 "私钥签名,公钥验证 ",也可以说是“公共密钥签名系统” 再来说一下 "公共密钥签名系统 "目的:(如果晕就多看几遍,这个没搞清,后面的代码就更晕) 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说的,用私钥加密签名,公钥验证是可以的。