微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

openssl_decryption无法显示纯文本

如何解决openssl_decryption无法显示纯文本

我正在使用openssl_encryptopenssl_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 举报,一经查实,本站将立刻删除。