Maison  >  Questions et réponses  >  le corps du texte

Aucune réponse reçue lors de la tentative de déchiffrement de la chaîne chiffrée

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);
}

En utilisant ces deux fonctions pour crypter et décrypter les données, seul mon cryptage fonctionne.

// Encrypting foo 
echo encrypt("foo", "hfgdhgdfhgfd");

// Response
DyUxPwraJyk=

// Decrypting DyUxPwraJyk= 
echo decrypt("DyUxPwraJyk=", "hfgdhgdfhgfd");

// Doesn't respond with anything.

J'ai tout essayé, même réécrire la fonction plusieurs fois, mais rien ne semble fonctionner.

P粉186904731P粉186904731257 Il y a quelques jours322

répondre à tous(1)je répondrai

  • P粉895187266

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

    $iv Les options ont un "Vecteur d'initialisation", qui agit un peu comme un sel : il fournit un état initial différent pour chaque message, de manière à garantir des résultats différents pour chiffrer deux fois le même message.

    Tout comme le sel, le IV doit être sélectionné au hasard lors du cryptage du message, puis transmis ou stocké avec le message afin que la même valeur puisse être fournie lors du déchiffrement du message.

    Vous souhaiterez peut-être que votre fonction encrypt ajoute 加密函数将$iv附加到输出,并解密 à la sortie et decrypt pour les séparer.

    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

    répondre
    0
  • Annulerrépondre