php的openssl进行 rsa 加密与解密范例

岭南一剑 贡献于2012-09-01

作者 Huang  创建于2012-04-05 02:09:00   修改者Huang  修改于2012-04-05 02:11:00字数3036

文档摘要:需要配置PHP.INI文件,打开extension=php_openssl.dll
关键词:

//index.php '; $pre = $rsa->privEncrypt('Testing:Hello World!'); echo 'Private Encrypted:' . $pre . '
'; $pud = $rsa->pubDecrypt($pre); echo 'Public Decrypted:' . $pud . '
'; //公钥加密,私钥解密 echo 'source:working in here!
'; $pue = $rsa->pubEncrypt('working in here!'); echo 'Public Encrypt:' . $pue . '
'; $prd = $rsa->privDecrypt($pue); echo 'Private Decrypt:' . $prd; ?> //rsaclass.php _keyPath = $path; } /** * create the key pair,save the key to $this->_keyPath */ public function createKey(){ $r = openssl_pkey_new(); openssl_pkey_export($r, $privKey); file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'key.pem', $privKey); $this->_privKey = openssl_pkey_get_public($privKey); $rp = openssl_pkey_get_details($r); $pubKey = $rp['key']; file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.pem', $pubKey); $this->_pubKey = openssl_pkey_get_public($pubKey); } /** * setup the private key */ public function setupPrivKey(){ if(is_resource($this->_privKey)){ return true; } $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'key.pem'; $prk = file_get_contents($file); $this->_privKey = openssl_pkey_get_private($prk); return true; } /** * setup the public key */ public function setupPubKey(){ if(is_resource($this->_pubKey)){ return true; } $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.pem'; $puk = file_get_contents($file); $this->_pubKey = openssl_pkey_get_public($puk); return true; } /** * encrypt with the private key */ public function privEncrypt($data){ if(!is_string($data)){ return null; } $this->setupPrivKey(); $r = openssl_private_encrypt($data, $encrypted, $this->_privKey); if($r){ return base64_encode($encrypted); } return null; } /** * decrypt with the private key */ public function privDecrypt($encrypted){ if(!is_string($encrypted)){ return null; } $this->setupPrivKey(); $encrypted = base64_decode($encrypted); $r = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey); if($r){ return $decrypted; } return null; } /** * encrypt with public key */ public function pubEncrypt($data){ if(!is_string($data)){ return null; } $this->setupPubKey(); $r = openssl_public_encrypt($data, $encrypted, $this->_pubKey); if($r){ return base64_encode($encrypted); } return null; } /** * decrypt with the public key */ public function pubDecrypt($crypted){ if(!is_string($crypted)){ return null; } $this->setupPubKey(); $crypted = base64_decode($crypted); $r = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey); if($r){ return $decrypted; } return null; } public function __destruct(){ @ fclose($this->_privKey); @ fclose($this->_pubKey); } } ?> 加密使用 公钥, 解密使用 私钥 签名使用 私钥, 验证使用 公钥 私钥 可以导出 公钥 产生私钥, 指定位数1024, 公钥指数e, 通常是3, 17, 65537 $ openssl genrsa -out priv.key 1024 Generating RSA private key, 1024 bit long modulus …..++++++ ……++++++ e is 65537 (0×10001) 取出公钥 $ openssl rsa -in priv.key -pubout -out pub.key 

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 6 人已下载

下载文档