问题描述
我正在使用openssl_encrypt
和openssl_decrypt
传输安全消息。它工作正常,但有时无法显示实际消息。整个消息很好,除了最后几个字节。我猜 OPENSSL_ZERO_PADDING 出了点问题。谁能解释为什么会这样?我正在使用ENC_CIPHER_ALGORITHM=AES-256-CFB
public function encryptMessage($message)
{
// get parameters
$algorithm = getenv('ENC_CIPHER_ALGORITHM');
$private_key = hex2bin(getenv('ENC_PRIVATE_KEY'));
$init_vector = hex2bin(getenv('ENC_INIT_VECTOR'));
$time = date('Y-m-d h:i:s');
//SIGNATURE = MESSAGE;TIMESTAMP
$plaintext = $message.';'.$time;
// generate cipher
$cipher = openssl_encrypt($plaintext,$algorithm,$private_key,OPENSSL_ZERO_PADDING,$init_vector);
return $cipher;
}
public function decryptMessage($chipher)
{
// get parameters
$algorithm = getenv('ENC_CIPHER_ALGORITHM');
$private_key = hex2bin(getenv('ENC_PRIVATE_KEY'));
$init_vector = hex2bin(getenv('ENC_INIT_VECTOR'));
// decrypt
$plaintext = openssl_decrypt($chipher,$init_vector);
return $plaintext;
}
预期输出:(通常看起来像这样)
array(2) {
[0]=>
string(7) "message"
[1]=>
string(19) "2020-08-13 10:04:35"
}
损坏的输出:(有时)
array(2) {
[0]=>
string(7) "message"
[1]=>
string(19) "2020-08-13 10:04:5�"
}
更新:我正在使用GET方法发送密码,而未使用任何URL编码。现在,我使用了PHP rawurlencode()方法。那解决了问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)