Image

知识库 → 用于加密和解密文本的 php 脚本示例

[脚本]
出版日期: 10.10.2023

下面是在 PHP 8.1 上测试的脚本示例,用于基于 openssl 加密和解密文本字符串。

nano encrypt-decrypt.php
<?php 

define('ENCRYPTION_KEY', '<mark>my-secret-key-there-2121</mark>');

// Encrypt
$plaintext = "<output>在 php 8.1 中测试加密字符串</output>";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
<output>echo $ciphertext.'<br>';</output>
 
// Decrypt
$c = base64_decode($ciphertext);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$plaintext = openssl_decrypt($ciphertext_raw, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
if (hash_equals($hmac, $calcmac))
{
    <output>echo $plaintext;</output>
}

?>

第一行是加密的结果,第二行是解密的结果。 此外,如果我们刷新页面而不更改短语,我们总是会得到不同的结果,但解密后结果将是相同的。

要将这些函数分离到不同的文件中,您需要传输 ENCRYPTION_KEY 参数中的密钥。





暂时没有评论