最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ThinkPHP實現(xiàn)的rsa非對稱加密類示例

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

本文實例講述了ThinkPHP實現(xiàn)的rsa非對稱加密類。分享給大家供大家參考,具體如下:

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

私鑰加密的字符串是不會變化的,即使暴露在外網(wǎng)上別人截取時如果沒有公鑰也是看不出來內(nèi)容的,僅允許給予公鑰的第三方來解密并看到內(nèi)容,實際作用相當(dāng)于簽名功能,如果能拿到未加密的內(nèi)容,說明一定是信任方的數(shù)據(jù),因為有他的簽名啊。

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

<?php
namespace 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 應(yī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個長度的字符串
  //提取私鑰
  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 需要加密的字符串(最好不要超過200個字符)
  * @param $appName string 應(yī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類型的密鑰,如果密鑰文件內(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 需要解密的字符串(最好不要超過200個字符)
  * @param $appName string 應(yīng)用名稱
  */
  public static function publicDecrypt($data, $appName)
  {
  $result = ['status'=>0, 'msg'=>''];
  $data = base64_decode($data);
  $publickey = C($appName.'.PUBLIC_KEY');
  //生成resource類型的公鑰,如果公鑰文件內(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 需要加密的字符串(最好不要超過200個字符)
  * @param $appName string 應(yīng)用名稱
  */
  public static function publicEncrypt($data, $publickey)
  {
  $result = ['status'=>0, 'msg'=>''];
  //生成resource類型的公鑰,如果公鑰文件內(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 需要解密的字符串(最好不要超過200個字符)
  * @param $appName string 應(yīng)用名稱
  */
  public static function privateDecrypt($data, $appName)
  {
  $result = ['status'=>0, 'msg'=>''];
  $data = base64_decode($data);
  $privatekey = C($appName.'.PRIVATE_KEY');
  //生成resource類型的私鑰,如果私鑰文件內(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)于加密解密感興趣的朋友還可以參考本站在線工具:

在線RSA加密/解密工具:
http://tools.jb51.net/password/rsa_encode

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

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

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

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

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

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

相關(guān)文章

  • php之二維數(shù)組排序問題

    php之二維數(shù)組排序問題

    這篇文章主要介紹了php之二維數(shù)組排序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • yii操作cookie實例簡介

    yii操作cookie實例簡介

    這篇文章主要介紹了yii操作cookie實例,需要的朋友可以參考下
    2014-07-07
  • symfony2.4的twig中date用法分析

    symfony2.4的twig中date用法分析

    這篇文章主要介紹了symfony2.4的twig中date用法,結(jié)合實例形式分析了twig中針對日期與時間操作的常見方法,需要的朋友可以參考下
    2016-03-03
  • yii2利用自帶UploadedFile實現(xiàn)上傳圖片的示例

    yii2利用自帶UploadedFile實現(xiàn)上傳圖片的示例

    本篇文章主要介紹了yii2利用自帶UploadedFile實現(xiàn)上傳圖片的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 用PHP生成excel文件到指定目錄

    用PHP生成excel文件到指定目錄

    這篇文章主要介紹了用PHP生成excel文件到指定目錄的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • php預(yù)定義變量使用幫助(帶實例)

    php預(yù)定義變量使用幫助(帶實例)

    php取得外部變量的首選方法是用下面提及的超全局變量。在此之前,人們要么依賴 register_globals,要么就是長長的預(yù)定義 PHP 數(shù)組($HTTP_*_VARS)。自 PHP 5.0.0 起,長格式的 PHP 預(yù)定義變量可以通過設(shè)置 register_long_arrays 來屏蔽。
    2013-10-10
  • PHP異常處理淺析

    PHP異常處理淺析

    這篇文章主要介紹了PHP異常處理淺析,本文著重講解如何捕獲異常,并給出代碼操作實例,需要的朋友可以參考下
    2015-05-05
  • 實例講解YII2中多表關(guān)聯(lián)的使用方法

    實例講解YII2中多表關(guān)聯(lián)的使用方法

    最近工作中遇到了YII2多表關(guān)聯(lián)的相關(guān)問題,發(fā)現(xiàn)網(wǎng)上這方面的資料并不多,所以想著自己整理下吧,方便自己在以后需要的時候或者有需要的朋友們參考學(xué)習(xí),下面這篇文章主要給大家介紹了關(guān)于YII2中多表關(guān)聯(lián)的使用方法,需要的朋友下面來一起看看吧。
    2017-07-07
  • PhpStorm2020.1 安裝 debug - Postman 調(diào)用的詳細(xì)教程

    PhpStorm2020.1 安裝 debug - Postman 調(diào)用的詳細(xì)教程

    這篇文章主要介紹了PhpStorm2020.1 安裝 debug - Postman 調(diào)用的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • php購物車實現(xiàn)代碼

    php購物車實現(xiàn)代碼

    php購物車實現(xiàn)代碼這個代碼比較全,需要的朋友可以參考下。
    2011-10-10

最新評論

鹤峰县| 大厂| 峨眉山市| 新宁县| 田阳县| 西乌珠穆沁旗| 吉水县| 格尔木市| 渭南市| 灵寿县| 巴南区| 荔浦县| 盐边县| 福安市| 铜陵市| 冷水江市| 晋宁县| 亳州市| 桂平市| 昌平区| 长寿区| 邵阳市| 灵寿县| 博乐市| 武安市| 黄山市| 班玛县| 洪湖市| 翁牛特旗| 九江市| 久治县| 修水县| 左云县| 台东市| 临沧市| 龙游县| 陕西省| 双桥区| 延边| 九江县| 科技|