Rumah  >  Soal Jawab  >  teks badan

Tiada respons diterima apabila cuba menyahsulit rentetan yang disulitkan

rreeee

Menggunakan dua fungsi ini untuk menyulitkan dan menyahsulit data, hanya penyulitan saya yang berfungsi.

function encrypt($string, $key)
{
    $method = "BF-CBC";
    $iv = random_bytes(openssl_cipher_iv_length($method));
    $options = 0;
    $key = hash("sha256", $key);
    return openssl_encrypt($string, $method, $key, $options, $iv);
}

function decrypt($string, $key)
{
    $method = "BF-CBC";
    $iv = random_bytes(openssl_cipher_iv_length($method));
    $options = 0;
    $key = hash("sha256", $key);
    return openssl_decrypt($string, $method, $key, $options, $iv);
}

Saya telah mencuba segala-galanya, walaupun menulis semula fungsi beberapa kali, tetapi nampaknya tiada apa-apa yang berkesan.

P粉186904731P粉186904731306 hari yang lalu354

membalas semua(1)saya akan balas

  • P粉895187266

    P粉8951872662024-01-11 15:59:17

    $iv Pilihan mempunyai "Vektor Permulaan", yang bertindak sedikit seperti garam: ia memberikan keadaan awal yang berbeza untuk setiap mesej, untuk menjamin hasil yang berbeza untuk menyulitkan mesej yang sama dua kali.

    Sama seperti garam, IV harus dipilih secara rawak apabila menyulitkan mesej dan kemudian dihantar atau disimpan dengan mesej supaya nilai yang sama boleh diberikan semasa menyahsulit mesej.

    Anda mungkin mahu fungsi enkripsi anda ditambah 加密函数将$iv附加到输出,并解密 pada output dan nyahsulit untuk memisahkannya.

    function encrypt($string, $key)
    {
        $method = "BF-CBC";
        $iv = random_bytes(openssl_cipher_iv_length($method));
        $options = 0;
        $key = hash("sha256", $key);
        return base64_encode($iv)
            . '|'
            . openssl_encrypt($string, $method, $key, $options, $iv);
    }
    
    function decrypt($encryptedString, $key)
    {
        $method = "BF-CBC";
        [ $iv, $ciphertext ] = explode('|', $encryptedString, 2);
        $iv = base64_decode($iv);
        $options = 0;
        $key = hash("sha256", $key);
        return openssl_decrypt($ciphertext, $method, $key, $options, $iv);
    }
    
    echo encrypt("foo", "hfgdhgdfhgfd");
    # fJTTArVw8e8=|zJOHacxbs1Q=
    
    echo decrypt("fJTTArVw8e8=|zJOHacxbs1Q=", "hfgdhgdfhgfd");
    # foo

    balas
    0
  • Batalbalas