PHP 基于openssl 的 AES 加密与解密
程序员文章站
2022-06-29 21:49:53
...
PHP 7以后不再支持 mcrypt 模块,采用openssl进行替换。下述代码实现了对文本的128位 AES-ECB加密算法。
通过substr(openssl_digest(openssl_digest($this->secret_key, ‘sha1’, true), ‘sha1’, true), 0, 16)函数,实现了等价于JAVA 端加密时使用的SHA1PRNG,根据用户提供的密码,生成128位**。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>AES加密测试</title>
</head>
<body>
<?php
class AES{
protected $method;//加密算法
protected $secret_key;//**
public function __construct(){}//类构建函数
/**
* AES加密算法
*
* @param string $content 加密内容
*
* @param string $password **
* @return string
*/
public function encrypt($content,$password)
{
if (!isset($content)||$content=='') {
return '';
}
$this->secret_key = isset($password) ? $password : exit('');//判断是否输入**
$this->method = 'AES-128-ECB';//定义AES加密算法
$this->secret_key = substr(openssl_digest(openssl_digest($this->secret_key, 'sha1', true), 'sha1', true), 0, 16); //根据输入的password,基于sha1哈希加密给定的密码,保留16字节
$result = openssl_encrypt($content, $this->method, $this->secret_key);//加密
$str = base64_encode($result);
return $str;//返回结果
}
/**
* AES解密算法
*
* @param string $content 密文
*
* @return string
*/
public function decrypt($content)
{
$content = base64_decode($content);
return openssl_decrypt($content, $this->method, $this->secret_key);
}
}
$content = "幸福每一天";
$password = '12345678abcdefgh';
$security = new AES();
$value = $security->encrypt($content,$password);
echo "==================原文==================<br/>";
echo $content.'<br/>';
echo "==================加密==================<br/>";
echo $value.'<br/>';
echo "==================解密==================<br/>";
echo $security->decrypt($value).'<br/>';
//var_dump($security->sign($content)).'<br/>';
?>
</body>
</html>
测试结果:
上一篇: 我想抖落一身星光,从此长眠于你心上
下一篇: 我想你了,真的,在风起的晚上