前言
本文介绍的是laravel 5.3中自定义加密服务的方案,利用laravel的服务容器,实现自定义加密服务注册(示例是支持长字符串的RSA加密),下面来看看详细的介绍: 
创建加密解密服务类
文件地址 /app/Service/Common/CryptService.php 代码如下
 
下面这个是个人写的支持长字符串的RSA加密类作为示例,自定义加密的话只需更改这个文件的代码就好,其它操作只是为了实现依赖注入。 
public function select($select = 'rsa_api') 
{ 
$config = config('crypt'); 
if (array_key_exists($select,$config)) { 
$this->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; $i<strlen($data); $i+=117){ 
$src = substr($data,$i,117); 
$crypt[$index] = $src; 
$index++; 
} 
return $crypt; 
} 
private function doEncryptPrivate($data) 
{ 
$rs = ''; 
if (@openssl_private_encrypt($data,$rs,$this->prikey) === FALSE) { 
return NULL; 
} 
return $rs; 
} 
private function doDecryptPrivate($data) 
{ 
$rs = ''; 
if (@openssl_private_decrypt($data,$this->prikey) === FALSE) { 
return null; 
} 
return $rs; 
} 
private function doEncryptPublic($data){ 
$rs = ''; 
if (@openssl_public_encrypt($data,$this->pubkey) === FALSE) { 
return NULL; 
} 
return $rs; 
} 
private function doDecryptPublic($data) 
{ 
$rs = ''; 
if (@openssl_public_decrypt($data,$this->pubkey) === FALSE) { 
return null; 
} 
return $rs; 
} 
} 
创建门面facades
文件地址 /app/Facades/CryptFacades.php 代码如下: 
class CryptFacades extends Facade{ 
public static function getFacadeAccessor() 
{ 
return 'MyCrypt'; 
} 
}
注册服务
创建文件 /app/Providers/MyCryptServiceProvider.php 代码如下:
 
其实也可以在AppServiceProvider中注册,就不用另外建个MyCryptServiceProvider.php文件了
 
而且在/config/app.php中一般也已经有了AppServiceProvider的声明 
use AppServiceCommonCryptService; 
use IlluminateSupportServiceProvider;
class MyCryptServiceProvider extends ServiceProvider 
{ 
/** 
- Bootstrap the application services.
 
- 
 
- @return void
 
*/ 
public function boot() 
{ 
// 
} 
 
/** 
use IlluminateHttpRequest; 
use MyCrypt; 
class IndexController extends Controller{ 
public function test(){ 
$crypt = MyCrypt::select('rsa_api'); 
$crypt->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添加路由
4、浏览器访问验证结果
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。                         (编辑:莱芜站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |