php和openssl实现非对称加密的代码示例

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实现非对称加密的代码示例所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com