php desc加密,PHP如何实现AES加密、解密?方法介绍(代码示例)

4f31b966e47b9a691c1f49f88bb75167.png

1、mcrypt_encrypt AES加密,解密class Lib_desEnctyp

{

private $key = "";

private $iv = "";

/**

* 构造,传递二个已经进行base64_encode的KEY与IV

*

* @param string $key

* @param string $iv

*/

function __construct ($key, $iv)

{

if (empty($key) || empty($iv)) {

echo 'key and iv is not valid';

exit();

}

$this->key = $key;

$this->iv = $iv;

}

/**

*加密

* @param $value

* @return

*/

public function encrypt ($value)

{

$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

$iv = base64_decode($this->iv);

$value = $this->PaddingPKCS7($value);

$key = base64_decode($this->key);

mcrypt_generic_init($td, $key, $iv);

$ret = base64_encode(mcrypt_generic($td, $value));

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return $ret;

}

/**

*解密

* @param $value

* @return

*/

public function decrypt ($value)

{

$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

$iv = base64_decode($this->iv);

$key = base64_decode($this->key);

mcrypt_generic_init($td, $key, $iv);

$ret = trim(mdecrypt_generic($td, base64_decode($value)));

$ret = $this->UnPaddingPKCS7($ret);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return $ret;

}

private function PaddingPKCS7 ($data)

{

$block_size = mcrypt_get_block_size('tripledes', 'cbc');

$padding_char = $block_size - (strlen($data) % $block_size);

$data .= str_repeat(chr($padding_char), $padding_char);

return $data;

}

private function UnPaddingPKCS7($text)

{

$pad = ord($text{strlen($text) - 1});

if ($pad > strlen($text)) {

return false;

}

if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {

return false;

}

return substr($text, 0, - 1 * $pad);

}

}

2、openssl 加密,解密 [方式1]/**

* DES加密类

* User: gaowei

* Date: 2017/12/12

* Time: 19:23

*/

class DesEncrypt {

private $key = "";

private $iv = "";

/**

* 构造,传递二个已经进行base64_encode的KEY与IV

*

* @param string $key

* @param string $iv

*/

function __construct ($key, $iv)

{

if (empty($key) || empty($iv)) {

echo 'key and iv is not valid';

exit();

}

$this->key = $key;

$this->iv = $iv;//8

//$this->iv = $iv.'00000000000';//16

}

/**

* @title 加密

* @author gaowei

* @date 2017/12/18

* @param string $value 要传的参数

* @ //OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING //AES-128-ECB|AES-256-CBC|BF-CBC

* @return json

* */

public function encrypt ($value) {

//参考地址:https://stackoverflow.com/questions/41181905/php-mcrypt-encrypt-to-openssl-encrypt-and-openssl-zero-padding-problems#

$value = $this->PaddingPKCS7($value);

$key = base64_decode($this->key);

$iv = base64_decode($this->iv);

//AES-128-ECB|不能用 AES-256-CBC|16 AES-128-CBC|16 BF-CBC|8 aes-128-gcm|需要加$tag DES-EDE3-CBC|8

$cipher = "DES-EDE3-CBC";

if (in_array($cipher, openssl_get_cipher_methods())) {

//$ivlen = openssl_cipher_iv_length($cipher);

// $iv = openssl_random_pseudo_bytes($ivlen);

$result = openssl_encrypt($value, $cipher, $key, OPENSSL_SSLV23_PADDING, $iv);

//$result = base64_encode($result); //为3的时间要用

//store $cipher, $iv, and $tag for decryption later

/* $original_plaintext = openssl_decrypt($result, $cipher, $key, OPENSSL_SSLV23_PADDING, $iv);

echo $original_plaintext."\n";*/

}

return $result;

}

/**

* @title 解密

* @author gaowei

* @date 2017/12/18

* @param string $value 要传的参数

* @return json

* */

public function decrypt ($value) {

$key = base64_decode($this->key);

$iv = base64_decode($this->iv);

$decrypted = openssl_decrypt($value, 'DES-EDE3-CBC', $key, OPENSSL_SSLV23_PADDING, $iv);

$ret = $this->UnPaddingPKCS7($decrypted);

return $ret;

}

private function PaddingPKCS7 ($data) {

//$block_size = mcrypt_get_block_size('tripledes', 'cbc');//获取长度

//$block_size = openssl_cipher_iv_length('tripledes', 'cbc');//获取长度

$block_size = 8;

$padding_char = $block_size - (strlen($data) % $block_size);

$data .= str_repeat(chr($padding_char), $padding_char);

return $data;

}

private function UnPaddingPKCS7($text) {

$pad = ord($text{strlen($text) - 1});

if ($pad > strlen($text)) {

return false;

}

if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {

return false;

}

return substr($text, 0, - 1 * $pad);

}

}

3、openssl 加密,解密 [方式2]/**

* @desc:php aes加密解密类

* @author gl

* @date 2019/08/31

*/

class CI_Aes{

/**

* CI_Aes cipher

* @var string

*/

protected $cipher = 'aes-128-ecb';

/**

* CI_Aes key

*

* @var string

*/

protected $key;

/**

* CI_Aes constructor

* @param string $key Configuration parameter

*/

public function __construct($key=null){

$this->key = $key;

}

/**

* Initialize

*

* @param array $params Configuration parameters

* @return CI_Encryption

*/

public function initialize($params)

{

if (!empty($params) && is_array($params)) {

foreach ($params as $key => $val) {

$this->$key = $val;

}

}

}

/**

* Encrypt

*

* @param string $data Input data

* @return string

*/

public function encrypt($data) {

$endata = openssl_encrypt($data, $this->cipher, $this->key, OPENSSL_RAW_DATA);

return bin2hex($endata);

}

/**

* Decrypt

*

* @param string $data Encrypted data

* @return string

*/

public function decrypt($data) {

$encrypted = hex2bin($data);

return openssl_decrypt($encrypted, $this->cipher, $this->key, OPENSSL_RAW_DATA);

}

}

4、其他 加密,解密//加密函数

function lock_url($txt,$key='www.jb51.net')

{

$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";

$nh = rand(0,64);

$ch = $chars[$nh];

$mdKey = md5($key.$ch);

$mdKey = substr($mdKey,$nh%8, $nh%8+7);

$txt = base64_encode($txt);

$tmp = '';

$i=0;$j=0;$k = 0;

for ($i=0; $i

$k = $k == strlen($mdKey) ? 0 : $k;

$j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;

$tmp .= $chars[$j];

}

return urlencode($ch.$tmp);

}

//解密函数

function unlock_url($txt,$key='www.jb51.net')

{

$txt = urldecode($txt);

$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";

$ch = $txt[0];

$nh = strpos($chars,$ch);

$mdKey = md5($key.$ch);

$mdKey = substr($mdKey,$nh%8, $nh%8+7);

$txt = substr($txt,1);

$tmp = '';

$i=0;$j=0; $k = 0;

for ($i=0; $i

$k = $k == strlen($mdKey) ? 0 : $k;

$j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);

while ($j<0) $j+=64;

$tmp .= $chars[$j];

}

return base64_decode($tmp);

}

相关教程推荐:《PHP教程》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值