介绍
这篇文章给大家分享的是有关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 nullphp和openssl实现非对称加密的案例