PHP AES加密解密 2023-02-01
2023-01-31 本文已影响0人
阿然学编程
- AES加密解密
AES-128:需要提供 16 位的密钥 key
AES-192:需要提供 24 位的密钥 key
AES-256:需要提供 32 位的密钥 key
AES ECB模式生成固定密钥安全性低
AES CBC模式每次生成的密文都不同安全性高
<?php
function encryptAES($data, $key, $iv) {
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
$encrypted = base64_encode($encrypted);
return $encrypted;
}
function decryptAES($encryptedData, $key, $iv) {
$encryptedData = base64_decode($encryptedData);
$decrypted = openssl_decrypt($encryptedData, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
return $decrypted;
}
// 示例用法
$key = '0123456789abcdef'; // 32字节的密钥
$iv = 'abcdef0123456789'; // 16字节的初始化向量
$data = 'Hello, world!';
$encryptedData = encryptAES($data, $key, $iv);
$decryptedData = decryptAES($encryptedData, $key, $iv);
echo '加密后的数据:' . $encryptedData . "\n";
echo '解密后的数据:' . $decryptedData . "\n";
?>
/**
* php>=7.1
* AES-256-CBC 加密
* @param $data
* @return mixed|string
*/
function encrypt_cbc($data)
{
$key = '235325fdgerteGHdsfsdewred4345341';
$text = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA);
return base64_encode($text);
}
/**
* php>=7.1
* AES-256-CBC 解密
* @param $text
* @return string
*/
function decrypt_cbc($text)
{
$key = '235325fdgerteGHdsfsdewred4345341';
$decodeText = base64_decode($text);
$data = openssl_decrypt($decodeText, 'AES-256-CBC', $key, OPENSSL_RAW_DATA);
return $data;
}
/**
* php>=7.1
* AES-128-ECB 加密
* @param $str
* @param $key
* @return string
*/
function encrypt_ecb($str, $key)
{
$key = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);
$data = openssl_encrypt($str, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
return strtoupper(bin2hex($data));
}
/**
* php>=7.1
* AES-128-ECB 解密
* @param $str
* @param $key
* @return bool|string
*/
function decrypt_ecb($str, $key)
{
$key = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);
$data = hex2bin(strtolower($str));
$data = openssl_decrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA, '');
return $data;
}