本篇文章给大家带来的内容是关于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:\min\install\wamp\wamp64\bin\php\php5.6.25\extras\ssl\openssl.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实现非对称加密的代码示例的详细内容。