gpt4 book ai didi

php - OpenSSL 加密/解密 php

转载 作者:行者123 更新时间:2023-12-04 12:11:41 25 4
gpt4 key购买 nike

我正在做加密,效果很好,但使用相同的方法进行解密我得到的是空白字符串而不是解密字符串。我正在使用方法 AES-256-ECB 和键是十六进制所以我通过

$key = pack('H*','xxxxxxxxxxxx');



加密正确,但解密不起作用。请帮助我我做错了什么。
function encrypt(string $data, string $key, string $method): string
{
$ivSize = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($ivSize);
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
$encrypted = strtoupper(implode(null, unpack('H*', $encrypted)));
return $encrypted;
}

function decrypt(string $data, string $key, string $method): string
{

$data = pack('H*', $data);
$ivSize = openssl_cipher_iv_length($method);
$iv = $iv = openssl_random_pseudo_bytes($ivSize);
$decrypted = openssl_decrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
return trim($decrypted);
}

最佳答案

使用以下代码,您的功能对我来说非常完美:

$key = pack('H*','aaaaaaaaaaaaa');
$method = 'aes-256-ecb';
$encrypted = encrypt('test string', $key, $method);
$decrypted = decrypt($encrypted, $key.'a', $method);

echo $decrypted; // Output: 'test string'

由于您得到一个空字符串进行解密,这意味着您在解密时得到了错误的 key 或密文。确保用于解密的 key 与用于加密的 key 完全相同,包括对其进行的任何操作,例如 pack()你在这里完成的功能。即使是一个字节的差异,你也无法解密。

还要确保 key 和密文在存储时都没有被截断。如果使用数据库并且列类型对于您尝试存储的内容来说太小,它将截断值。

关于php - OpenSSL 加密/解密 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51035808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com