gpt4 book ai didi

ThinkPHP实现的rsa非对称加密类示例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章ThinkPHP实现的rsa非对称加密类示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了ThinkPHP实现的rsa非对称加密类。分享给大家供大家参考,具体如下:

公钥加密后的字符串是一直变化的,但是用私钥解密后的内容仍然是相同的,这是为了加密数据使用的.

私钥加密的字符串是不会变化的,即使暴露在外网上别人截取时如果没有公钥也是看不出来内容的,仅允许给予公钥的第三方来解密并看到内容,实际作用相当于签名功能,如果能拿到未加密的内容,说明一定是信任方的数据,因为有他的签名啊.

其实这种非对称加密技术可以用于单点登录中去,安全级别高,能解密获取到内容应该就是信任方的数据.

<?phpnamespace Common\Org;class RsaCrypt { const CERPATH ='../Application/Runtime/Data/server.cer'; //生成证书路径 const PFXPATH = '../Application/Runtime/Data/server.pfx'; //秘钥文件路径 const FILEDIR = '../Application/Runtime/Data/';  /**  * 生成公钥私钥  */  public static function generateCertKey()  {  $dn = array('countryName'=>'CN', 'stateOrProvinceName'=>'beijing', 'localityName'=>'beijing','organizationName'=>'clcw',    'organizationalUnitName'=>'clcw', 'commonName'=>'clcw', 'emailAddress'=>'service@clcw.com.cn');  $privkeypass = 'secret';  //私钥密码  $numberOfDays = 365;   //有效时长,单位为天  //生成证书  $privkey = openssl_pkey_new();  $csr = openssl_csr_new($dn, $privkey);  $sscert = openssl_csr_sign($csr, null, $privkey, $numberOfDays);  openssl_x509_export_to_file($sscert, self::CERPATH);  openssl_pkcs12_export_to_file($sscert, self::PFXPATH, $privkey, $privkeypass);  (file_exists(self::CERPATH)) or die('公钥的文件路径错误');  (file_exists(self::PFXPATH)) or die('密钥的文件路径错误');  }  public static function verifyData($originData, $decryptData)  {  $cer_key = file_get_contents(self::$cerpath);  $cer = openssl_x509_read($cer_key);  $res = openssl_verify($originData, $decryptData, $cer);  var_dump($res);  }  /**  * 生成公钥私钥文件  * @param $appName string 应用名称  */  public static function generateKey($appName='')  {  $result = ['status'=>0, 'msg'=>''];  if (!extension_loaded('openssl') ) {   $result['msg'] = 'php需要openssl支持';  }  //创建公钥  $res = openssl_pkey_new();//array('private_key_bits'=>512) 这一串参数不加,否则只能加密54个长度的字符串  //提取私钥  openssl_pkey_export($res, $privatekey);  //生成公钥  $public_key = openssl_pkey_get_details($res);  $publickey = $public_key['key'];  // $path = self::FILEDIR.$appName;  try{   // file_put_contents($path.'_public.pem', $publickey);   // file_put_contents($path.'_private.pem', $privatekey);   $result['status'] = 1;   $result['publickey'] = $publickey;   $result['privatekey'] = $privatekey;  }catch(\Exception $e) {   // throw new \Exception($e->getMessage());   $result['msg'] = $e->getMessage();  }  return $result;  }  /**  * 用私钥加密数据  * @param $data string 需要加密的字符串(最好不要超过200个字符)  * @param $appName string 应用名称  */  public static function privateEncrypt($data, $appName)  {  $result = ['status'=>0, 'msg'=>''];  $privatekey = C($appName.'.PRIVATE_KEY');  $myinfo = 'In '.__METHOD__.',privatekey:'.$privatekey."\n";  file_put_contents('/tmp/shiyf.log', $myinfo, FILE_APPEND);  //生成resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false  $privatekey = openssl_pkey_get_private($privatekey);  if (empty($privatekey)) {   $result['msg'] = '密钥不可用';  }  $encryptData = '';  //用私钥加密  if (openssl_private_encrypt($data, $encryptData, $privatekey)) {   $result['msg'] = base64_encode($encryptData);   $result['status'] = 1;  } else {   $result['msg'] = '加密失败!';  }  return $result;  }  /**  * 用公钥解密数据  * @param $data string 需要解密的字符串(最好不要超过200个字符)  * @param $appName string 应用名称  */  public static function publicDecrypt($data, $appName)  {  $result = ['status'=>0, 'msg'=>''];  $data = base64_decode($data);  $publickey = C($appName.'.PUBLIC_KEY');  //生成resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false  $publickey = openssl_pkey_get_public($publickey);  if (empty($publickey)) {   $result['msg'] = '公钥不可用';  }  //解密数据  $decryptData = '';  if (openssl_public_decrypt($data, $decryptData, $publickey)) {   $result['msg'] = $decryptData;   $result['status'] = 1;  } else {   $result['msg'] = '解密失败';  }  return $result;  }  /**  * 用公钥加密数据  * @param $data string 需要加密的字符串(最好不要超过200个字符)  * @param $appName string 应用名称  */  public static function publicEncrypt($data, $publickey)  {  $result = ['status'=>0, 'msg'=>''];  //生成resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_private函数返回false  $publickey = openssl_pkey_get_public($publickey);  if (empty($publickey)) {   $result['msg'] = '公钥不可用';  }  $encryptData = '';  //用私钥加密  if (openssl_public_encrypt($data, $encryptData, $publickey)) {   $result['msg'] = base64_encode($encryptData);   $result['status'] = 1;  } else {   $result['msg'] = '加密失败!';  }  return $result;  }  /**  * 用私钥加密数据  * @param $data string 需要解密的字符串(最好不要超过200个字符)  * @param $appName string 应用名称  */  public static function privateDecrypt($data, $appName)  {  $result = ['status'=>0, 'msg'=>''];  $data = base64_decode($data);  $privatekey = C($appName.'.PRIVATE_KEY');  //生成resource类型的私钥,如果私钥文件内容被破坏,openssl_pkey_get_public函数返回false  $privatekey = openssl_pkey_get_private($privatekey);  if (empty($privatekey)) {   $result['msg'] = '私钥不可用';  }  //解密数据  $decryptData = '';  if (openssl_private_decrypt($data, $decryptData, $privatekey)) {   $result['msg'] = $decryptData;   $result['status'] = 1;  } else {   $result['msg'] = '解密失败';  }  return $result;  }}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助.

最后此篇关于ThinkPHP实现的rsa非对称加密类示例的文章就讲到这里了,如果你想了解更多关于ThinkPHP实现的rsa非对称加密类示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com