Comment crypter et déchiffrer une chaîne PHP?


Answers

Ce qu'il ne faut pas faire

ATTENTION:
Cette réponse utilise ECB . L'ECB n'est pas un mode de cryptage, c'est seulement un bloc de construction. L'utilisation de l'ECB comme démontré dans cette réponse ne crypte pas la chaîne en toute sécurité. N'utilisez pas ECB dans votre code. Voir share pour une bonne solution.

Je l'ai eu moi-même. En fait, j'ai trouvé une réponse sur google et juste modifié quelque chose. Le résultat est complètement non sécurisé cependant.

<?php
define("ENCRYPTION_KEY", "!@#$%^&*");
$string = "This is the original data string!";

echo $encrypted = encrypt($string, ENCRYPTION_KEY);
echo "<br />";
echo $decrypted = decrypt($encrypted, ENCRYPTION_KEY);

/**
 * Returns an encrypted & utf8-encoded
 */
function encrypt($pure_string, $encryption_key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
    return $encrypted_string;
}

/**
 * Returns decrypted original string
 */
function decrypt($encrypted_string, $encryption_key) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
    return $decrypted_string;
}
?>
Question

Ce que je veux dire est:

Original String + Salt or Key --> Encrypted String
Encrypted String + Salt or Key --> Decrypted (Original String)

Peut-être quelque chose comme:

"hello world!" + "ABCD1234" --> Encrypt --> "2a2ffa8f13220befbe30819047e23b2c" (may be, for e.g)
"2a2ffa8f13220befbe30819047e23b2c" --> Decrypt with "ABCD1234" --> "hello world!"
  • En PHP, comment pouvez-vous faire cela?

Crypt_Blowfish utiliser Crypt_Blowfish , mais cela n'a pas fonctionné pour moi.




Pour le cadre de Laravel

Si vous utilisez le framework Laravel, il est plus facile de chiffrer et déchiffrer avec des fonctions internes.

$string = 'Some text to be encrypted';
$encrypted = \Illuminate\Support\Facades\Crypt::encrypt($string);
$decrypted_string = \Illuminate\Support\Facades\Crypt::decrypt($encrypted);

var_dump($string);
var_dump($encrypted);
var_dump($decrypted_string);

Remarque: Veillez à définir une chaîne aléatoire de 16, 24 ou 32 caractères dans l'option clé du fichier config / app.php. Sinon, les valeurs cryptées ne seront pas sécurisées.