openssl_decryption无法显示纯文本

时间:2020-08-13 10:12:59

标签: php encryption-symmetric

我正在使用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, $algorithm, $private_key, OPENSSL_ZERO_PADDING, $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()方法。那解决了问题。

0 个答案:

没有答案