欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ThinkPHP實(shí)現(xiàn)的rsa非對(duì)稱(chēng)加密類(lèi)示例

 更新時(shí)間:2018年05月29日 08:42:25   作者:錚亮不銹  
這篇文章主要介紹了ThinkPHP實(shí)現(xiàn)的rsa非對(duì)稱(chēng)加密類(lèi),結(jié)合實(shí)例形式分析了thinkPHP引入密鑰文件實(shí)現(xiàn)rsa加密解密的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了ThinkPHP實(shí)現(xiàn)的rsa非對(duì)稱(chēng)加密類(lèi)。分享給大家供大家參考,具體如下:

公鑰加密后的字符串是一直變化的,但是用私鑰解密后的內(nèi)容仍然是相同的,這是為了加密數(shù)據(jù)使用的。

私鑰加密的字符串是不會(huì)變化的,即使暴露在外網(wǎng)上別人截取時(shí)如果沒(méi)有公鑰也是看不出來(lái)內(nèi)容的,僅允許給予公鑰的第三方來(lái)解密并看到內(nèi)容,實(shí)際作用相當(dāng)于簽名功能,如果能拿到未加密的內(nèi)容,說(shuō)明一定是信任方的數(shù)據(jù),因?yàn)橛兴暮灻 ?/p>

其實(shí)這種非對(duì)稱(chēng)加密技術(shù)可以用于單點(diǎn)登錄中去,安全級(jí)別高,能解密獲取到內(nèi)容應(yīng)該就是信任方的數(shù)據(jù)。

<?php
namespace Common\Org;
class RsaCrypt {
 const CERPATH ='../Application/Runtime/Data/server.cer'; //生成證書(shū)路徑
 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;   //有效時(shí)長(zhǎng),單位為天
  //生成證書(shū)
  $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('公鑰的文件路徑錯(cuò)誤');
  (file_exists(self::PFXPATH)) or die('密鑰的文件路徑錯(cuò)誤');
  }
  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 應(yīng)用名稱(chēng)
  */
  public static function generateKey($appName='')
  {
  $result = ['status'=>0, 'msg'=>''];
  if (!extension_loaded('openssl') ) {
   $result['msg'] = 'php需要openssl支持';
  }
  //創(chuàng)建公鑰
  $res = openssl_pkey_new();//array('private_key_bits'=>512) 這一串參數(shù)不加,否則只能加密54個(gè)長(zhǎng)度的字符串
  //提取私鑰
  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;
  }
  /**
  * 用私鑰加密數(shù)據(jù)
  * @param $data string 需要加密的字符串(最好不要超過(guò)200個(gè)字符)
  * @param $appName string 應(yīng)用名稱(chēng)
  */
  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類(lèi)型的密鑰,如果密鑰文件內(nèi)容被破壞,openssl_pkey_get_private函數(shù)返回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;
  }
  /**
  * 用公鑰解密數(shù)據(jù)
  * @param $data string 需要解密的字符串(最好不要超過(guò)200個(gè)字符)
  * @param $appName string 應(yīng)用名稱(chēng)
  */
  public static function publicDecrypt($data, $appName)
  {
  $result = ['status'=>0, 'msg'=>''];
  $data = base64_decode($data);
  $publickey = C($appName.'.PUBLIC_KEY');
  //生成resource類(lèi)型的公鑰,如果公鑰文件內(nèi)容被破壞,openssl_pkey_get_public函數(shù)返回false
  $publickey = openssl_pkey_get_public($publickey);
  if (empty($publickey)) {
   $result['msg'] = '公鑰不可用';
  }
  //解密數(shù)據(jù)
  $decryptData = '';
  if (openssl_public_decrypt($data, $decryptData, $publickey)) {
   $result['msg'] = $decryptData;
   $result['status'] = 1;
  } else {
   $result['msg'] = '解密失敗';
  }
  return $result;
  }
  /**
  * 用公鑰加密數(shù)據(jù)
  * @param $data string 需要加密的字符串(最好不要超過(guò)200個(gè)字符)
  * @param $appName string 應(yīng)用名稱(chēng)
  */
  public static function publicEncrypt($data, $publickey)
  {
  $result = ['status'=>0, 'msg'=>''];
  //生成resource類(lèi)型的公鑰,如果公鑰文件內(nèi)容被破壞,openssl_pkey_get_private函數(shù)返回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;
  }
  /**
  * 用私鑰加密數(shù)據(jù)
  * @param $data string 需要解密的字符串(最好不要超過(guò)200個(gè)字符)
  * @param $appName string 應(yīng)用名稱(chēng)
  */
  public static function privateDecrypt($data, $appName)
  {
  $result = ['status'=>0, 'msg'=>''];
  $data = base64_decode($data);
  $privatekey = C($appName.'.PRIVATE_KEY');
  //生成resource類(lèi)型的私鑰,如果私鑰文件內(nèi)容被破壞,openssl_pkey_get_public函數(shù)返回false
  $privatekey = openssl_pkey_get_private($privatekey);
  if (empty($privatekey)) {
   $result['msg'] = '私鑰不可用';
  }
  //解密數(shù)據(jù)
  $decryptData = '';
  if (openssl_private_decrypt($data, $decryptData, $privatekey)) {
   $result['msg'] = $decryptData;
   $result['status'] = 1;
  } else {
   $result['msg'] = '解密失敗';
  }
  return $result;
  }
}

PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線(xiàn)工具:

在線(xiàn)RSA加密/解密工具:
http://tools.jb51.net/password/rsa_encode

文字在線(xiàn)加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

在線(xiàn)散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在線(xiàn)MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在線(xiàn)sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《ThinkPHP入門(mén)教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門(mén)教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門(mén)教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 微信跳一跳php代碼實(shí)現(xiàn)

    微信跳一跳php代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了微信跳一跳輔助php代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • PHP函數(shù)in_array()使用詳解

    PHP函數(shù)in_array()使用詳解

    這篇文章主要介紹了PHP函數(shù)in_array()使用詳解,分別對(duì)普通使用、使用第三個(gè)參數(shù)、克隆對(duì)象、多維數(shù)組等給出了例子,需要的朋友可以參考下
    2014-08-08
  • 使用PHP免費(fèi)發(fā)送定時(shí)短信的實(shí)例

    使用PHP免費(fèi)發(fā)送定時(shí)短信的實(shí)例

    本篇文章介紹了使用PHP免費(fèi)發(fā)送定時(shí)短信的實(shí)例,可以定時(shí)的發(fā)送短信到手機(jī)上,有需要的朋友可以了解一下。
    2016-10-10
  • 簡(jiǎn)單PHP上傳圖片、刪除圖片實(shí)現(xiàn)代碼

    簡(jiǎn)單PHP上傳圖片、刪除圖片實(shí)現(xiàn)代碼

    PHP上傳圖片、刪除圖片實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2010-05-05
  • CodeIgniter記錄錯(cuò)誤日志的方法全面總結(jié)

    CodeIgniter記錄錯(cuò)誤日志的方法全面總結(jié)

    這篇文章主要介紹了CodeIgniter記錄錯(cuò)誤日志的方法,詳細(xì)分析了CodeIgniter框架的文件結(jié)構(gòu)與相應(yīng)的功能,結(jié)合實(shí)例分析了CodeIgniter框架記錄錯(cuò)誤日志的實(shí)現(xiàn)技巧,并分析了隱藏index文件與數(shù)據(jù)傳輸?shù)燃记?總結(jié)非常全面,需要的朋友可以參考下
    2016-05-05
  • php之a(chǎn)pp消息推送案例教程

    php之a(chǎn)pp消息推送案例教程

    這篇文章主要介紹了php之a(chǎn)pp消息推送案例教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • PHP基本語(yǔ)法總結(jié)

    PHP基本語(yǔ)法總結(jié)

    這篇文章主要介紹了PHP基本語(yǔ)法總結(jié),本文從PHP能做什么開(kāi)始講解,對(duì)PHP的語(yǔ)法、注釋、變量、常量等內(nèi)容做了總結(jié),需要的朋友可以參考下
    2014-09-09
  • php簡(jiǎn)單的留言板與回復(fù)功能具體實(shí)現(xiàn)

    php簡(jiǎn)單的留言板與回復(fù)功能具體實(shí)現(xiàn)

    留言板是在剛接觸php時(shí)用來(lái)學(xué)習(xí)的一個(gè)簡(jiǎn)單的應(yīng)用例子了,今天我再給初學(xué)php的朋友提供一個(gè)完整的php留言板的全部制作過(guò)程,希望對(duì)你會(huì)有幫助
    2014-02-02
  • PHP正則提取不包含指定網(wǎng)址的圖片地址的例子

    PHP正則提取不包含指定網(wǎng)址的圖片地址的例子

    今天在做圖片提取的時(shí)候,遇到了這個(gè)情況,一篇文章中的圖片,提取出來(lái)一張作為文章的封面,這樣在排版的時(shí)候圖文模式看著比較舒服
    2014-04-04
  • Thinkphp5.0自動(dòng)生成模塊及目錄的方法詳解

    Thinkphp5.0自動(dòng)生成模塊及目錄的方法詳解

    這篇文章主要介紹了Thinkphp5.0自動(dòng)生成模塊及目錄的方法,簡(jiǎn)單分析了Thinkphp5.0的結(jié)構(gòu)、目錄、創(chuàng)建與運(yùn)行方法,需要的朋友可以參考下
    2017-04-04

最新評(píng)論