php和openssl实现非对称加密的代码示例
内容导读
收集整理的这篇技术教程文章主要介绍了php和openssl实现非对称加密的代码示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5741字,纯文字阅读大概需要9分钟。
内容图文
本篇文章给大家带来的内容是关于php和openssl实现非对称加密的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。<?phpnamespace MyObjSummary;/** * 使用openssl实现非对称加密 */class Rsa{ /** * 私钥 * */ private $_privKey; /** * 公钥 * */ private $_pubKey; /** 保存文件地址 * @var */ private $_keyPath; /** 公钥 * @var string */ private $_pubKeyLink = "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCF4sz1eu4XgLeIK9Aiu4+rfgltk1gmNhUytOtk3kbzPoy2XoR5sQIRXBYnIagwBVOLPWDacVJoqjfeK6xGvL17745uZ7RubcZIW62ocgX3swIDAQAB-----END PUBLIC KEY-----"; /**私钥 * @var string */ private $_priKeyLink = "-----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQCF4sz1eu4XgLeIK9Aiu4+rfgltk1gmNhUytOtk3kbzPoy2XoR5sQIRXBYnIagwBVOLPWDacVJoqjfeK6xGvL17745uwNSw3eKLl1qm+w2z5KhNEnpgLWxKxSPMfekt1Aj3Te0Ct652Scr42Coca/ld2mGkZ7RubcZIW62ocgX3swIDAQABAoGAHinbvU6Fx5vDPZWJXdnd42gQ3bP9fxZeLj9ebSo61+B2uTuQIw6DBcA2aXiGuNLqYItif7RaOaRn09EJDiLFmYwRBXAGnEdSnxWRy/IMrtKATV+dLnyFDVrIzsn+/9l3HQXKhlSqTc4v7o1sWAM9GW2vjB3X432BjzbgqCyplOECQQC7UnvQUZYT+sumPStREJt85krUKgeFwyQdji+BdAXhv9xz3PiSWsAvw87zFrpBKcWbTimSH38onKGahtuYE08xAkEAtvjx7t05TiVusPcsgABxoABKRKZpcY5QQIXTT3oigvCMuz41nBDmEXeot+TXBGwG0QNS7p5BwkrXfCFJJONkIwJAUbcItfZxPqQAJLO4arOQ8KpRaD4xa+OVpKL7DEC9tB4LICv773RRNET5yUdX1sdPIZG2Rr0grmmtgYhk0PFTcQJBAI8Iuv2VL3fMBI4SGWWN/LPSeZkUdPbh0GmRCSo4nPOfxK8=-----END RSA PRIVATE KEY-----"; /** * Rsa constructor. * @param string $path */ public function __construct($path='') { if (!empty($path)) { $this->_keyPath = $path; } } /** * 创建公钥和私钥 * */ public function createKey() { $config = [ "config" => 'D:MinInstallwampwamp64binphpphp5.6.25extrassslopenssl.cnf', "digest_alg" => "sha512", "private_key_bits" => 4096, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]; // 生成私钥 $rsa = openssl_pkey_new($config); openssl_pkey_export($rsa, $privKey, NULL, $config); file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key', $privKey); $this->_privKey = openssl_pkey_get_public($privKey); // 生成公钥 $rsaPri = openssl_pkey_get_details($rsa); $pubKey = $rsaPri['key']; file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key', $pubKey); $this->_pubKey = openssl_pkey_get_public($pubKey); } /** 设置私钥 * @return bool */ public function setupPrivKey() { if (is_resource($this->_privKey)) { return true; } //从文件中获取 /*$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key'; $privKey = file_get_contents($file);*/ $privKey = $this->_priKeyLink; $this->_privKey = openssl_pkey_get_private($privKey); return true; } /** 设置公钥 * @return bool */ public function setupPubKey() { //从文件中获取 /*$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key'; $pubKey = file_get_contents($file);*/ //数据源 $pubKey = $this->_pubKeyLink; $this->_pubKey = openssl_pkey_get_public($pubKey); return true; } /** 用私钥加密 * @param $data * @return null|string */ public function privEncrypt($data) { if (!is_string($data)) { return null; } $this->setupPrivKey(); $result = openssl_private_encrypt($data, $encrypted, $this->_privKey); if ($result) { return base64_encode($encrypted); } return null; } /** 私钥解密 * @param $encrypted * @return null */ public function privDecrypt($encrypted) { if (!is_string($encrypted)) { return null; } $this->setupPrivKey(); $encrypted = base64_decode($encrypted); $result = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey); if ($result) { return $decrypted; } return null; } /** 公钥加密 * @param $data * @return null|string */ public function pubEncrypt($data) { if (!is_string($data)) { return null; } $this->setupPubKey(); $result = openssl_public_encrypt($data, $encrypted, $this->_pubKey); if ($result) { return base64_encode($encrypted); } return null; } /** 公钥解密 * @param $crypted * @return null */ public function pubDecrypt($crypted) { if (!is_string($crypted)) { return null; } $this->setupPubKey(); $crypted = base64_decode($crypted); $result = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey); if ($result) { return $decrypted; } return null; } /** 私钥签名 * @param $data * @return string */ public function priKeySign($data) { if(!is_string($data)) return null; $private_key=openssl_get_privatekey($this->_priKeyLink); $original_str= $data ;//原数据 openssl_sign($original_str,$sign,$private_key); openssl_free_key($private_key); $sign=base64_encode($sign);//最终的签名 return $sign ; } /** 公钥验签 * @param $sign * @param $data * @return bool */ public function pubKeyCheck($sign,$data) { if(!is_string($sign) || !is_string($data)) return null; $public_key=openssl_get_publickey($this->_pubKeyLink); $sign=base64_decode($sign);//得到的签名 $original_str=$data; $result=(bool)openssl_verify($original_str,$sign,$public_key); openssl_free_key($public_key); return $result ; } /** * __destruct * */ public function __destruct() { @fclose($this->_privKey); @fclose($this->_pubKey); }}$rsa = new Rsa();echo "openssl_private_encrypt,openssl_public_decrypt","<br />";//私钥加密,公钥解密echo "私钥加密,公钥验签","<br />";echo "待加密数据:testInfo","<br />";$pre = $rsa->privEncrypt("testInfo");echo "加密后的密文:<br />" . $pre . "<br />";$pud = $rsa->pubDecrypt($pre);echo "解密后数据:" . $pud . "<br />";echo "<hr>";//公钥加密,私钥解密echo "openssl_public_encrypt,openssl_private_decrypt","<br />";echo "公钥加密,私钥验签","<br />";echo "待加密数据:ssh-test","<br />";$pue = $rsa->pubEncrypt("ssh-test");echo "加密后的密文:","<br />" . $pue . "<br />";$prd = $rsa->privDecrypt($pue);echo "解密后数据:" . $prd;echo "<hr>";echo "<hr>";echo "openssl_sign,openssl_verify","<br />";echo "私钥签名,公钥验签","<br />";echo "待加密数据:test=32","<br />";$pre = $rsa->priKeySign('test=32');echo "加密后的密文:","<br />" . $pre . "<br />";$pud = $rsa->pubKeyCheck($pre,'test=32');echo "是否解密成功:" . $pud . "<br />";echo "<hr>";
以上就是php和openssl实现非对称加密的代码示例的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的php和openssl实现非对称加密的代码示例全部内容,希望文章能够帮你解决php和openssl实现非对称加密的代码示例所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。