zoukankan      html  css  js  c++  java
  • php理解非对称SSL加密解密、验证及签名

        加密方式分为对称加密和非对称加密,对称加密只使用一个秘钥,加密和解密都使用该秘钥;非对称加密则使用一对秘钥,使用公钥加密,私钥解密。
        需要通过原生的openssl_public_encrypt加密,openssl_private_decrypt解密
        公钥和私钥都可以用来加密数据,相反用另一个解开.
    
        (1)公钥加密数据,然后私钥解密的情况被称为加密解密.
        例如:
        Tskey表示Tom的私钥,Tpkey表示Tom的公钥
        Bskey表示Bob的私钥,Bpkey表示Bob的公钥    
      Tom给Bob发消息:(用对方的公钥加密,用自己的私钥解密)这中行为加密和解密
    . 加密结果 = RsaEncrypt(消息内容,Bpkey); Bob收到了Tom发送的加密后的数据,进行解密 消息内容 = RsaDecrypt(加密结果,Bskey); (2)私钥加密数据,公钥解密一般被称为签名和验证签名. 例如: Tskey表示Tom的私钥,Tpkey表示Tom的公钥 Bskey表示Bob的私钥,Bpkey表示Bob的公钥 Tom给Bob发信: (用自己的私钥进行签名,用对方的公钥进行验证)这种行为签名和验证签名. 数字签名 = RsaSign(信件内容,Tskey); Bob收到Tom的来信,使用Tom的公钥,验证数字签名 验证结果 = RsaVerify(信件内容,数字签名,Tpkey); 在PHP还有两种常用的数字签名分别是sha1和md5. sha1通常是对一段内容或者一个文件进行签名,以判断信息在传输的过程中没有被修改过. md5则常用在登录验证,将签名的结果保存到数据库中,每次登录进行签名的验证. 总结:在公钥密码体制中,公钥对别人有用,私钥对自己有用

      /**
      * RSA验证签名
      * @param string $data 待签名数据
      * @param string $sign 需要验签的签名
      * @param string $publicKey App公钥, PEM格式
      * 验签公钥,摘要算法为MD5
      * @return bool 验签是否通过 bool值
      */
      public function verifySign($data, $sign,$publickey)
      {
        //获取公钥

       $publicKey = file_get_contents($publickey);
      //转换为openssl格式密钥
       $res = openssl_get_publickey($publicKey);
      //调用openssl内置方法验签,返回bool值
       $result = (bool)openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_MD5);
      //释放资源
       openssl_free_key($res);
      //返回资源是否成功
       return $result;
      }
     
  • 相关阅读:
    flex 开发air 2.0 sdk 设置
    后来的我们
    岷县蓓蕾中学开展读书活动侧记
    c# 中文件操作 文件被锁住的问题
    wcf中配置文件
    ASP.NET中的session存储模式运用
    net中用户登录验证和基页面类
    jquery文件上传控件 Uploadify
    MongoDB基本介绍及一些用法
    用SQL删除重复记录的N种方法
  • 原文地址:https://www.cnblogs.com/cxx8181602/p/8466395.html
Copyright © 2011-2022 走看看