Php 为什么在openssl_encrypt中使用不同的输入会得到相同的结果

Php 为什么在openssl_encrypt中使用不同的输入会得到相同的结果,php,encryption,Php,Encryption,我试图用PHP中的openssl\u encrypt加密我的行数据 我希望对一行中的所有数据使用相同的IV(因为我希望每行只保存一个IV)。但是当我尝试加密时,当我使用单个IV时,对于不同的输入,我会得到相同的结果 例如,我得到两个变量“username”和“image”,并尝试用一个IV对这两个变量进行加密,但结果从两个不同的输入(username,image)返回相同的字符串。我怎样才能解决这个问题 我的代码: function encrypt($plaintext,$iv): string

我试图用PHP中的
openssl\u encrypt
加密我的行数据

我希望对一行中的所有数据使用相同的IV(因为我希望每行只保存一个IV)。但是当我尝试加密时,当我使用单个IV时,对于不同的输入,我会得到相同的结果

例如,我得到两个变量“username”和“image”,并尝试用一个IV对这两个变量进行加密,但结果从两个不同的输入(username,image)返回相同的字符串。我怎样才能解决这个问题

我的代码:
function encrypt($plaintext,$iv): string{

    //echo $iv."\n";
    $ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
    $hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
    $ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
    return $ciphertext;
}?>

函数上下文中没有$key变量。用所有警告运行它enabled@MaximSagaydachny我知道,但我想知道为什么两个具有相同iv的不同输入返回相同的值,并在启用所有警告的情况下运行它-您将看到警告PHP注意:未定义变量:cipher,这是相同输出的情况。如果将$cipher替换为“AES-128-CBC”或添加全局$cipher;进入函数后,您将得到不同的输出。@Maxisagaydachny谢谢。我发现iv是静态变量。这是真的吗?关于“iv是静态的”你是什么意思?openssl_随机_伪_字节是否为您返回相同的数据?在php中实现openssl_random_pseudo_字节时存在错误-在某些情况下返回相同的结果。我不知道这个问题是否已经解决。但是您可以安全地使用random_bytes()代替openssl_random_pseudo_bytes