MD5 MySQL için olan şifreleme değil mi hocam?
MD5 güvenli değil şifreleme için ve encryption değil, hash algoritması. AES-256 kullan. Ayrıca password depolamak için geri çözmek yerine oneway hashing çok daha sağlıklı. Ama MD5 gibi bir şeyle değil de, bcrypt gibi bir algoritmayla yapmak daha sağlıklı. Geri çözmeye çalışmamalısın şifreyi, onun yerine hash kıyası yaparsın. Geri çözülemeyecek olduğu için sisteminde başka bir açık yoksa decrypt ederek şifreye ulaşamazlar.
<?php
if(!isset($_SESSION)) {
session_start();
}
function encrypt($data, $key, $iv, $aad ='') {
$cipher = "aes-256-gcm";
$tag = "";
$options = 0;
$encrypted = openssl_encrypt($data, $cipher, $key, $options, $iv, $tag, $aad);
return $encrypted . ":" . $tag;
}
function decrypt($data, $key, $iv, $aad ='') {
$cipher = "aes-256-gcm";
$tag = "";
$options = 0;
list($data, $tag) = explode(":", $data);
$decrypted = openssl_decrypt($data, $cipher, $key, $options, $iv, $tag, $aad);
return $decrypted;
}
$key = openssl_random_pseudo_bytes(32); // Daha sonra kullanmak için keyi kaydetmek gerekiyor.
$iv = openssl_random_pseudo_bytes(16);
if(isset($_POST['username'])) {
$encrypted = encrypt($_POST['username'], $key, $iv);
echo "Encrypted: " . $encrypted . "<br>";
echo "Decrypted: " . decrypt($encrypted, $key, $iv) . "<br>";
echo password_hash($_POST['password'], PASSWORD_DEFAULT);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="username" id="" />
<input type="password" name="password" id="" />
<button type="submit">Send</button>
</form>
</body>
</html>
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.