日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php非,PHP实现非对称加密

發(fā)布時(shí)間:2025/4/16 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php非,PHP实现非对称加密 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

非對(duì)稱加密

至于什么是非對(duì)稱加密,這里就不說啦,大家谷歌去吧。這里說明的是,最近在做一個(gè)對(duì)外的充值加密服務(wù),那么涉及到這個(gè)加密的處理,中間遇到幾個(gè)小問題,所以記錄下,方便自己下次查閱。

詳細(xì)代碼

/**

* 使用openssl實(shí)現(xiàn)非對(duì)稱加密

*

* @since 2015-11-10

*/

class Rsa

{

/**

* 私鑰

*

*/

private $_privKey;

/**

* 公鑰

*

*/

private $_pubKey;

/**

* 保存文件地址

*/

private $_keyPath;

/**

* 指定密鑰文件地址

*

*/

public function __construct($path)

{

if (empty($path) || !is_dir($path)) {

throw new Exception('請(qǐng)指定密鑰文件地址目錄');

}

$this->_keyPath = $path;

}

/**

* 創(chuàng)建公鑰和私鑰

*

*/

public function createKey()

{

$config = [

"config" => 'D:\wamp\bin\apache\apache2.4.9\conf\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);

}

/**

* 設(shè)置私鑰

*

*/

public function setupPrivKey()

{

if (is_resource($this->_privKey)) {

return true;

}

$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';

$privKey = file_get_contents($file);

$this->_privKey = openssl_pkey_get_private($privKey);

return true;

}

/**

* 設(shè)置公鑰

*

*/

public function setupPubKey()

{

if (is_resource($this->_pubKey)) {

return true;

}

$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key';

$pubKey = file_get_contents($file);

$this->_pubKey = openssl_pkey_get_public($pubKey);

return true;

}

/**

* 用私鑰加密

*

*/

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;

}

/**

* 私鑰解密

*

*/

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;

}

/**

* 公鑰加密

*

*/

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;

}

/**

* 公鑰解密

*

*/

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;

}

/**

* __destruct

*

*/

public function __destruct() {

@fclose($this->_privKey);

@fclose($this->_pubKey);

}

}

?>

測試

$rsa = new Rsa('ssl-key');

//私鑰加密,公鑰解密

echo "待加密數(shù)據(jù):segmentfault.com\n";

$pre = $rsa->privEncrypt("segmentfault.com");

echo "加密后的密文:\n" . $pre . "\n";

$pud = $rsa->pubDecrypt($pre);

echo "解密后數(shù)據(jù):" . $pud . "\n";

//公鑰加密,私鑰解密

echo "待加密數(shù)據(jù):segmentfault.com\n";

$pue = $rsa->pubEncrypt("segmentfault.com");

echo "加密后的密文:\n" . $pue . "\n";

$prd = $rsa->privDecrypt($pue);

echo "解密后數(shù)據(jù):" . $prd;

重要問題

這里特別要注意的是在配置中要指定openssl.cnf的文件地址,或者設(shè)置個(gè)OPENSSL_CONF全局變量就可以了。

總結(jié)

以上是生活随笔為你收集整理的php非,PHP实现非对称加密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。