4.17.0 RSA 私钥和公钥的一些自己的理解

RSA 是非对称加密算法

对称的加密算法,加密和解密都是使用的一套密钥,而非对称使用的是两套密钥。

例如我要传的是18,然后我加密的时候是3*6,然后能我解密的时候,可能是(3*3)*(6/3)=9*2=18 来得到这个18.
我加密的时候是一种密钥,
解密的时候又是一种密钥。



1:加密的密钥与解密的密钥不相同 
2:    使用私钥加密的内容,只能通过公钥来解密
      使用公钥加密的内容,只能通过私钥来解密

3:公钥,可以对外给任何人的加密和解密密码,公开的,可以任何人访问

4:私钥,私钥是一定要严格保护的,通过私钥可以生成公钥,但是从公钥可以认为是永远无法推导出私钥的。

问题:私钥可以生成公钥,但是公钥不能生成私钥。那么支付宝里面放了私钥合理吗?


-------------------------------------------------------------------------------------------------------------------------

1: 基于公开密钥的加密过程

-------------------------------------------------------------------------------------------------------------------------

  比如有两个用户CEO财务CEO想把一段明文通过双钥加密的技术发送给财务财务有一对公钥和私钥,那么加密解密的过程如下:

  1. 财务将他的公开密钥传送给Alice。(或者CEO从公司的服务器获取公开密钥
  2. CEO财务的公开密钥加密她的消息,然后传送给财务
  3. 财务用他的私人密钥解密CEO的消息。

  上面的过程可以用下图表示,CEO使用财务的公钥进行加密,财务用自己的私钥进行解密。

------------------------------------------------------------------------------------------------------------------------- 

2:基于公开密钥的认证过程

-------------------------------------------------------------------------------------------------------------------------

  身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。

   还是CEO财务这两个用户,CEO想让财务知道自己是真实的CEO,而不是假冒的,因此CEO只要使用私钥公钥密码对文件签名发送 给财务财务使用CEO的公钥对文件进行解密,如果可以解密成功,则证明财务的私钥是正确的,因而就完成了对财务的身份鉴别。整个身 份认证的过程如下:

  1. CEO用她的私人密钥对文件加密,从而对文件签名。
  2. CEO将签名的文件传送给财务
  3. 财务CEO的公钥解密文件,从而验证签名。



----------------------------------------

公钥可以分享给任何人的,例如github 上面就是需要我们上传公钥的。

项目中使用到密钥的案例:
案例一:

GitHub的公钥的生成:






--------------------------------------------------------------------------------------------------------------------------------------

http://bbs.csdn.net/topics/390599148

刚接触Git有很多困惑
1.为什么要公钥和私钥呢,到底有啥用呢(详细点)
2.为什么要把我的公钥加到Git项目之中保存起来
3.比如,某路人甲 想给我的项目提供一些代码,他没有我的公钥可以push给我吗?


2. GIT服务器上存储的是公钥,你本地存储的是私钥, 当你push本地代码库到远程代码库,服务器会要求你出示私钥,并且用你出示的私钥和它的公钥配对来完成认证。由于使用的是不对称加密,所以公钥可以公开,只要保管好私钥就可以。
3. 路人甲只要没有私钥,所以无法push。这样才能保证开源项目的完整性,否则阿猫阿狗都去push代码,那项目不就乱套了?如果路人甲想对你的项目做出贡献,那么以GITHUB为例,他会发送一个pull request给你,然后由你来审核他作出的改变,如果审核通过,那么你就可以将他的pull request合并到你工程的某一分支中。这里只以GITHUB为例,私有的GIT服务器可能没有类似功能,比如GITLAB就没有pull request。

--------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------

案例二:


支付宝有两种模式:
一种就是demo里面(demo 只是给我们看怎么弄的),本地支付,但是不安全,
客户端生成Order -> 使用私钥进行签名-》payInfo-》支付宝服务器使用商户的公钥进行校验
一种是通过自己的服务器进行签名:
客户端生成order -》提交给服务器-》服务器计算金额,orderInfo-》通过私钥生成签名sign-》pageInfo-》回来给客户端客户端再将这个信息给支付宝


支付宝也需要用到公钥,私钥,我们的项目里面填写私钥就好了,支付宝那边已经有了公钥了





公钥,上传给服务器,服务器就认可这台电脑私钥加密的东西。
在PayDemoActivity:里面有。下面的几个是公司给的或者是你帮公司申请的。
// 商户PID public static final String PARTNER = "2088601082136243";
// 商户收款账号 public static final String SELLER = "[email protected]";
// 商户私钥,pkcs8格式
// 客户端使用的私钥,对于请求进行数字签名,传给服务器,服务器使用公钥进行验证 public static final String RSA_PRIVATE = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM62H9NVaAFL54uyqjNv11J7eeOsh/xRQ2c31zUXGmFvuq5iUVxahQBNKa5O3w4qoOdzCt6yw+Fcl9hN/9NV9pWiCUBzNBluUMyqTb2Qs+bULisevBk810Uevo/Cct+gu+6e2tTal2dXszAXK7tYjJqd5Rzmc/qJRzFPNn4j3W2NAgMBAAECgYEAwEDBHtPrNHF9O/+Cru5RLGSs++SmYTTPZLuZy8XeAkthK/lDRIrn8lzR7E1sxYc+OaVUscU/y2VL0KDS06K6/8gVCcJe4UiCjIBXyhmwNBKBHf4jlKKAlaWZkPwJSxpfE1O16epBvTHZdyEY0ALfMnvQlUZ8RAAXo5DHGutHscECQQD++08BYfWDhYVpDzlEcPM+9fyecen8vGiX/T0+LB88kREIldjiQmqJyBvKECRBUJYg+2mqHGQjQMfBHfaaUsC9AkEAz4l27Qps5e93EmNlDn3RsMH+JVzMu0442nA8SbpRJOtmuqYDZAH7W2uj3J3J1gIbZg5zCxQc9rLDYcq2wo21EQJBAK1x/ZgPLpa8qLeCZ44q1wwpACI3ktccwnlBBfvYv5bPhyqz48hlLVt0B5M3z7GuQ7FD0+inT2a7liXDYBAx4nECQD8SSsc9LN0wSmKXPGYMDMcIHcGjE0E1Q4f3JgtOCU0MEVtWCp/BDm+5JcJtXaKhX0xDxeivAyJiL4ivv50ezdECQHptoOYG0tMCHL0oOXrZXsdpAFL/c8vX25Oq/uaYaR+Zgv02ipt+81YQ+8nYTwD55TZytt0TcifqUQhDf0y7XyQ=";
// 支付宝公钥 public static final String RSA_PUBLIC = "";




阅读更多

更多精彩内容