php和openssl实现非对称加密的案例

  介绍

这篇文章给大家分享的是有关php和openssl实现非对称加密的案例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

& lt; php ?   名称空间MyObjSummary;/* *   *使用openssl实现非对称加密   */类Rsa   {/* *   *私钥   *   */私人_privKey美元;/* *   *公钥   *   */私人_pubKey美元;/* *保存文件地址   * @var   */私人_keyPath美元;/* *公钥   * @var字符串   */私人$ _pubKeyLink=? - - - - - - - - - -开始公钥   MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCF4sz1eu4XgLeIK9Aiu4 + rfglt   k1gmNhUytOtk3kbzPoy2XoR5sQIRXBYnIagwBVOLPWDacVJoqjfeK6xGvL17745u   Z7RubcZIW62ocgX3swIDAQAB   ——————产生绯闻端公钥;;/* *私钥   * @var字符串   */私人$ _priKeyLink=? - - - - - - - - - -开始RSA私钥   MIICXAIBAAKBgQCF4sz1eu4XgLeIK9Aiu4 + rfgltk1gmNhUytOtk3kbzPoy2XoR5   sQIRXBYnIagwBVOLPWDacVJoqjfeK6xGvL17745uwNSw3eKLl1qm + w2z5KhNEnpg   LWxKxSPMfekt1Aj3Te0Ct652Scr42Coca/ld2mGkZ7RubcZIW62ocgX3swIDAQAB   AoGAHinbvU6Fx5vDPZWJXdnd42gQ3bP9fxZeLj9ebSo61 + B2uTuQIw6DBcA2aXiG   uNLqYItif7RaOaRn09EJDiLFmYwRBXAGnEdSnxWRy/IMrtKATV + dLnyFDVrIzsn +/9 l3hqxkhlsqtc4v7o1swam9gw2vjb3x432bjzbgqcyploecqqc7unvquzyt +总和   PStREJt85krUKgeFwyQdji + BdAXhv9xz3PiSWsAvw87zFrpBKcWbTimSH38onKGa   htuYE08xAkEAtvjx7t05TiVusPcsgABxoABKRKZpcY5QQIXTT3oigvCMuz41nBDm   EXeot + TXBGwG0QNS7p5BwkrXfCFJJONkIwJAUbcItfZxPqQAJLO4arOQ8KpRaD4x   + OVpKL7DEC9tB4LICv773RRNET5yUdX1sdPIZG2Rr0grmmtgYhk0PFTcQJBAI8I   uv2VL3fMBI4SGWWN/LPSeZkUdPbh0GmRCSo4nPOfxK8=薘SA私钥——产生绯闻;;/* *   * Rsa的构造函数。   * @param字符串$路径   */公共函数__construct ($ path=& # 39; & # 39;)   {   如果(!空(路径)美元){   $ this→_keyPath=$路径;   }   }/* *   *创建公钥和私钥   *   */公共函数createKey ()   {   $ config=(   “config"=比;& # 39;D: \敏\安装\ wamp \ wamp64 \ bin \ php \ php5.6.25 \ \配件\ ssl openssl.cnf& # 39;,   “digest_alg"=比;“sha512",   “private_key_bits"=比;4096年,   “private_key_type"=比;OPENSSL_KEYTYPE_RSA,      ];//生成私钥   (rsa=openssl_pkey_new美元配置);   openssl_pkey_export (rsa, privKey美元、零配置美元);   写入($ this→_keyPath。DIRECTORY_SEPARATOR。& # 39;priv.key& # 39; $ privKey);   $ this→_privKey=openssl_pkey_get_public ($ privKey);//生成公钥   (rsaPri=openssl_pkey_get_details美元rsa);   pubKey=rsaPri美元[& # 39;关键# 39;];   写入($ this→_keyPath。DIRECTORY_SEPARATOR。& # 39;pub.key& # 39; $ pubKey);   $ this→_pubKey=openssl_pkey_get_public ($ pubKey);   }/* *设置私钥   * @return bool   */公共函数setupPrivKey ()   {   如果(is_resource ($ this→_privKey)) {   返回true;   }//从文件中获?*文件=这→美元_keyPath。DIRECTORY_SEPARATOR。& # 39;priv.key& # 39;;   $ privKey=file_get_contents($文件);*/privKey=这→美元_priKeyLink;   $ this→_privKey=openssl_pkey_get_private ($ privKey);   返回true;   }/* *设置公钥   * @return bool   */公共函数setupPubKey ()   {//从文件中获?*文件=这→美元_keyPath。DIRECTORY_SEPARATOR。& # 39;pub.key& # 39;;   $ pubKey=file_get_contents($文件);*///数据源   pubKey=这→美元_pubKeyLink;   $ this→_pubKey=openssl_pkey_get_public ($ pubKey);   返回true;   }/* *用私钥加密   *数据(@param美元   * @return null字符串|   */公共函数privEncrypt(元数据)   {   如果(! is_string(元数据)){   返回null;   }   $ this→setupPrivKey ();   $=openssl_private_encrypt结果(数据加密,美元$ this→_privKey);   如果美元(结果){   美元返回base64_encode(加密);   }   返回null;   }/* *私钥解密   * @param $加密   * @return零   */公共函数privDecrypt(加密)   {   如果(! is_string加密($)){   返回null;   }   $ this→setupPrivKey ();   加密(加密=base64_decode美元);   结果美元=openssl_private_decrypt(加密,解密美元,美元这→_privKey);   如果美元(结果){   返回$解密;   }   返回null;   }/* *公钥加密   *数据(@param美元   * @return null字符串|   */公共函数pubEncrypt(元数据)   {   如果(! is_string(元数据)){   返回null;   }   $ this→setupPubKey ();   $=openssl_public_encrypt结果(数据加密,美元$ this→_pubKey);   如果美元(结果){   美元返回base64_encode(加密);   }   返回null;   }/* *公钥解密   * @param $地下室   * @return零   */公共函数pubDecrypt(地穴美元)   {   如果(! is_string(地穴美元)){   返回null;   }   $ this→setupPubKey ();   (地下室=base64_decode美元墓穴);   结果美元=openssl_public_decrypt(地穴,解密美元,美元这→_pubKey);   如果美元(结果){   返回$解密;   }   返回null;   }/* *私钥签名   *数据(@param美元   * @return字符串   */公共函数priKeySign(元数据)   {   如果(! is_string(数据)美元)返回null;   (private_key=openssl_get_privatekey美元这→_priKeyLink);   original_str=数据;美元//原数据   openssl_sign (original_str美元,美元符号,private_key美元);   openssl_free_key ($ private_key);   $符号=base64_encode($符号);//最终的签名   返回$符号;   }/* *公钥验签   * @param $符号   *数据(@param美元   * @return bool   */公共函数pubKeyCheck(迹象,美元数据)   {   如果(! is_string($符号)| | ! is_string(数据)美元)返回null;   (public_key=openssl_get_publickey美元这→_pubKeyLink);   $符号=base64_decode($符号);//得到的签名   original_str=美元数据;   结果美元=(bool) openssl_verify (original_str美元,美元符号,public_key美元);   openssl_free_key ($ public_key);   返回结果美元;   }/* *   * __destruct   *   */公共函数__destruct () {   @fclose ($ this→_privKey);   @fclose ($ this→_pubKey);   }   }   rsa美元=new rsa ();      回声“openssl_private_encrypt openssl_public_decrypt",“& lt; br/在“;//私钥加密,公钥解密   回声“私钥加密,公钥验签“,“& lt; br/在“;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

php和openssl实现非对称加密的案例