zoukankan      html  css  js  c++  java
  • php RSA非对称加密 的实现

    基本概念

    加密的意义

    加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义。
    
    加密方式分为对称加密和非对称加密
    

    什么是对称加密?

    对称加密只使用一个秘钥,加密和解密都使用该秘钥;
    

    什么是RSA非对称加密?

    使用一对秘钥,使用公钥加密,私钥解密。
    

    RSA非对称加密 一对秘钥的生成

    PHP中常用的非对称加密(即,公钥加密)的只要方式是rsa算法,需要通过原生的openssl_public_encrypt加密,openssl_private_decrypt解密。 也可以通过原生的openssl_private_encrypt加密,openssl_public_decrypt解密
    

    前提

    1. 我们假设Tom和Bob想要使用公钥加密方式进行通信,则他们首先要生成自己的秘钥对(公钥+私钥),然后交换公钥。 
       令: 
       Tskey表示Tom的私钥,Tpkey表示Tom的公钥 
       Bskey表示Bob的私钥,Bpkey表示Bob的公钥 
       (在公钥密码体制中,公钥对别人有用,私钥对自己有用)
    2. Tom有Bpkey和Tskey;Bon有Bskey和Tpkey
    
    

    加密和解密

    用对方的公钥加密,用自己的私钥解密
    
    
    Tom给Bob发消息:
    
    加密结果 = RsaEncrypt(消息内容,Bpkey);
    
    Bob收到了Tom发送的加密后的数据,进行解密
    
    消息内容 = RsaDecrypt(加密结果,Bskey);
    
    因为只有Bob只要Bskey,所以即使别人拦截到了加密数据,也不知道消息内容。
    
    

    数字签名和验证

    用自己的私钥进行签名,用对方的公钥进行验证
    
    Tom给Bob发送了一封信,不过这个信的内容有可能在传输过程中被篡改过(即:重放攻击),或者别人以Tom的名义给Bob发送了新近。所以Tom在发送信的时候,需要附带一个签名,证明这封信是Tom发出的,并且签名和信件的内容是相关的。Bob在收到Tom的信之后,首先对签名进行验证,如果邮件被修改过,签名就会失效,验证失败。
    
    Tom给Bob发信,使用自己的私钥,生成数字签名
    
    数字签名 = RsaSign(信件内容,Tskey);
    
    Bob收到Tom的来信,使用Tom的公钥,验证数字签名
    
    验证结果 = RsaVerify(信件内容,数字签名,Tpkey);
    
    
  • 相关阅读:
    常见的单链表题目
    SpringBoot Hello
    IDEA 重置
    lombok的用法
    软件测试系列白盒测试覆盖率的问题
    软件测试系列软件测试基础
    Linux常用命令1对文件进行查看、复制、移动和分割
    软件测试系列通用测试用例写作
    Java继承特性
    Linux常用命令3如何设置IP地址?如何更改系统时间?
  • 原文地址:https://www.cnblogs.com/foreversun/p/8601076.html
Copyright © 2011-2022 走看看