侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

laravel 5.3中自定义加密服务的方案详解

Laravel  /  管理员 发布于 8年前   339

前言

本文介绍的是laravel 5.3中自定义加密服务的方案,利用laravel的服务容器,实现自定义加密服务注册(示例是支持长字符串的RSA加密),下面来看看详细的介绍:

创建加密解密服务类

文件地址 /app/Service/Common/CryptService.php 代码如下

下面这个是个人写的支持长字符串的RSA加密类作为示例,自定义加密的话只需更改这个文件的代码就好,其它操作只是为了实现依赖注入。

config = $config[$select];   $this->private_key_size = $this->config['openssl_config']['private_key_bits'];  } else {   return false;  }  $this->keypath = dirname(dirname(dirname(__DIR__))) . $this->config['path'];  if(!file_exists($this->keypath)){   mkdir($this->keypath,"0777",true);  }  $this->prikey_path = $this->keypath . $this->config['private_key_file_name'];  $this->pubkey_path = $this->keypath . $this->config['public_key_file_name'];  if (file_exists($this->prikey_path))   $this->prikey = file_get_contents($this->prikey_path);  if (file_exists($this->pubkey_path))   $this->pubkey = file_get_contents($this->pubkey_path);  return $this; } public function makeKey() {  $res = openssl_pkey_new($this->config['openssl_config']);  openssl_pkey_export($res, $this->prikey);  file_put_contents($this->prikey_path, $this->prikey);  $pubkey = openssl_pkey_get_details($res);  $this->pubkey = $pubkey['key'];  file_put_contents($this->pubkey_path, $this->pubkey);  return $test = ['prikey' => $this->prikey, 'pubkey' => $this->pubkey]; } public function encryptPrivate($data){  $crypt = $this->encrypt_split($data);  $crypted = '';  foreach ($crypt as $k=>$c){   if($k!=0) $crypted.="@";   $crypted.=base64_encode($this->doEncryptPrivate($c));  }  return $crypted; } public function encryptPublic($data){  $crypt = $this->encrypt_split($data);  $crypted = '';  foreach ($crypt as $k=>$c){   if($k!=0) $crypted.="@";   $crypted.=base64_encode($this->doEncryptPublic($c));  }  return $crypted; } public function decryptPublic($data){  $decrypt = explode('@',$data);  $decrypted = "";  foreach ($decrypt as $k=>$d){   $decrypted .= $this->doDecryptPublic(base64_decode($d));  }  return $decrypted; } public function decryptPrivate($data){  $decrypt = explode('@',$data);  $decrypted = "";  foreach ($decrypt as $k=>$d){   $decrypted .= $this->doDecryptPrivate(base64_decode($d));  }  return $decrypted; } private function encrypt_split($data){  $crypt=[];$index=0;  for($i=0; $iprikey) === FALSE) {   return NULL;  }  return $rs; } private function doDecryptPrivate($data) {  $rs = '';  if (@openssl_private_decrypt($data, $rs, $this->prikey) === FALSE) {   return null;  }  return $rs; } private function doEncryptPublic($data){  $rs = '';  if (@openssl_public_encrypt($data, $rs, $this->pubkey) === FALSE) {   return NULL;  }  return $rs; } private function doDecryptPublic($data) {  $rs = '';  if (@openssl_public_decrypt($data, $rs, $this->pubkey) === FALSE) {   return null;  }  return $rs; }}

创建门面facades

文件地址 /app/Facades/CryptFacades.php 代码如下:

注册服务

创建文件 /app/Providers/MyCryptServiceProvider.php 代码如下:

其实也可以在AppServiceProvider中注册,就不用另外建个MyCryptServiceProvider.php文件了

而且在/config/app.php中一般也已经有了AppServiceProvider的声明

在配置中声明

文件地址 /config/app.php 在providershe和aliases中添加

'providers' => [ \App\Providers\MyCryptServiceProvider::class,],'aliases' => [ 'MyCrypt' => \App\Facades\CryptFacades::class,]

编写自定义加密解密服务的配置文件

/config/crypt.php 因为我写的CryptService有用到配置文件,所以需要再添加个配置文件。在实际项目中,可以根据需要自行设置配置文件和加密服务类。

 [  'path'=>DIRECTORY_SEPARATOR.'storage'.DIRECTORY_SEPARATOR.'rsakey'.DIRECTORY_SEPARATOR,  'private_key_file_name'=>'private_key.pem',  'public_key_file_name' =>'public_key.pem',  'openssl_config'=>[   "digest_alg" => "sha512",   "private_key_bits" => 1024,   "private_key_type" => OPENSSL_KEYTYPE_RSA,  ] ], 'rsa_data'=>[  'path'=>DIRECTORY_SEPARATOR.'storage'.DIRECTORY_SEPARATOR.'rsakey'.DIRECTORY_SEPARATOR,  'private_key_file_name'=>'private.pem',  'public_key_file_name' =>'public.pem',  'openssl_config'=>[   "digest_alg" => "sha512",   "private_key_bits" => 1024,   "private_key_type" => OPENSSL_KEYTYPE_RSA,  ] ]];

在Controller中使用的示例

1、artisan创建Controller文件

php artisan make:controller IndexController

2、编辑IndexController

makeKey();  $short = "abcd";  $long = "   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";  $req['short'] = $short;  $req['short_private_encrypt'] = $crypt->encryptPrivate($short);  $req['short_public_decrypt'] = $crypt->decryptPublic($req['short_private_encrypt']);  $req['long'] = $long;  $req['long_private_encrypt'] = $crypt->encryptPrivate($long);  $req['long_public_decrypt'] = $crypt->decryptPublic($req['long_private_encrypt']);  dump($req);  //dd($req); }}

3、在/routes/web.php添加路由

Route::get('/test', 'IndexController@test');

4、浏览器访问验证结果

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家的支持。

您可能感兴趣的文章:

  • 示例详解Laravel重置密码代码重构


  • 上一条:
    Laravel中如何增加自定义全局函数详解
    下一条:
    Laravel中任务调度console使用方法小结
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客