国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - ThinkPHP實現的rsa非對稱加密類示例

ThinkPHP實現的rsa非對稱加密類示例

2019-09-30 17:27錚亮不銹 PHP教程

這篇文章主要介紹了ThinkPHP實現的rsa非對稱加密類,結合實例形式分析了thinkPHP引入密鑰文件實現rsa加密解密的相關操作技巧,需要的朋友可以參考下

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

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

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

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

<?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 應用名稱
  */
  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'] = '加密失?。?#39;;
  }
  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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩激情免费视频 | 懂色av成人一区二区三区 | 亚洲国产福利一区 | 日韩欧美综合 | 国产一区二区精品在线观看 | 互换娇妻呻吟hd中文字幕 | 欧美精品一二三 | 亚洲精品成人免费 | 日韩成人精品 | 午夜国产精品视频 | 成人午夜网 | 91亚洲国产成人久久精品网站 | 亚洲福利网站 | 羞羞网站 | 中文字幕高清免费日韩视频在线 | 中文字幕亚洲一区二区三区 | 久久久久久国产一级毛片高清版 | 北条麻妃在线一区二区 | 激情五月综合网 | 国产精品毛片久久久久久久 | 日韩中文字幕视频在线观看 | 免费的黄色一级片 | 精品在线一区二区三区 | 中文字幕精品一区 | 一区二区三区久久 | 亚州成人 | 国产激情久久久久久 | 中文字幕在线观看一区二区三区 | 成人av在线电影 | 精品久久久久久国产 | 久久精品中文字幕 | 久久久精品网站 | 在线第一页 | 日韩成人在线播放 | 免费精品 | 中文视频在线 | 日韩欧美视频一区 | 三级视频在线 | 日本一区二区三区在线视频 | 久久久久久久久久亚洲 | 日日嗨av一区二区三区四区 |