- Bu konu boş.
-
YazarYazılar
-
Mart 3, 2025: 4:02 pm #139
admin
Anahtar yöneticiGüvenli veri iletimi ve saklama işlemlerinde AES (Advanced Encryption Standard) şifreleme algoritması yaygın olarak kullanılmaktadır. Bu makalede, JavaScript (CryptoJS) ve PHP (OpenSSL) kullanarak AES-256-CBC şifreleme ve çözme işlemlerinin nasıl gerçekleştirileceğini açıklıyoruz.
Web uygulamalarında kullanıcı verilerini güvenli hale getirmek için istemci tarafında JavaScript ile şifreleme, sunucu tarafında PHP ile çözme yöntemi oldukça etkilidir.
<!DOCTYPE html>
<html lang=”tr”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<title>AES Şifreleme & Çözme</title>
<link href=”https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css” rel=”stylesheet”>
</head>
<body class=”bg-light”><div class=”container mt-5″>
<h2 class=”text-center”>AES Şifreleme ve Çözme</h2>
<div class=”card p-4 shadow”>
<div class=”mb-3″>
<label for=”inputText” class=”form-label”>Metin:</label>
<textarea class=”form-control” id=”inputText” rows=”2″></textarea>
</div>
<div class=”mb-3″>
<label for=”key” class=”form-label”>Şifreleme Anahtarı:</label>
<input type=”text” class=”form-control” id=”key” placeholder=”Güçlü bir anahtar girin”>
</div>
<button class=”btn btn-primary w-100″ onclick=”encryptText()”>Şifrele</button>
<button class=”btn btn-danger w-100 mt-2″ onclick=”decryptText()”>Çöz</button>
<div class=”mt-3″>
<h5>Sonuç:</h5>
<textarea class=”form-control” id=”result” rows=”2″ readonly></textarea>
</div>
</div>
</div><script src=”https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js”></script>
<script>
// AES-256-CBC ile metni şifreleme fonksiyonu
function encryptText() {
let text = document.getElementById(“inputText”).value;
let key = document.getElementById(“key”).value;if (text === “” || key === “”) {
alert(“Metin ve anahtar boş olamaz!”);
return;
}let keyHash = CryptoJS.SHA256(key); // SHA-256 ile 32 byte anahtar üret
let iv = CryptoJS.lib.WordArray.random(16); // Rastgele 16 byte IVlet encrypted = CryptoJS.AES.encrypt(text, keyHash, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});// IV + Şifreli metni birleştirip Base64 formatına çeviriyoruz
let encryptedBase64 = CryptoJS.enc.Base64.stringify(iv.concat(encrypted.ciphertext));document.getElementById(“result”).value = encryptedBase64;
}// AES-256-CBC ile şifrelenmiş metni çözme fonksiyonu
function decryptText() {
let encryptedText = document.getElementById(“result”).value;
let key = document.getElementById(“key”).value;if (encryptedText === “” || key === “”) {
alert(“Çözülecek metin ve anahtar boş olamaz!”);
return;
}let keyHash = CryptoJS.SHA256(key); // SHA-256 ile 32 byte anahtar üret
let encryptedData = CryptoJS.enc.Base64.parse(encryptedText);
let iv = CryptoJS.lib.WordArray.create(encryptedData.words.slice(0, 4)); // İlk 16 byte IV
let ciphertext = CryptoJS.lib.WordArray.create(encryptedData.words.slice(4)); // Geri kalan şifreli metinlet decrypted = CryptoJS.AES.decrypt({ ciphertext: ciphertext }, keyHash, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});let originalText = decrypted.toString(CryptoJS.enc.Utf8);
if (!originalText) {
alert(“Hatalı anahtar veya şifrelenmiş metin!”);
return;
}document.getElementById(“result”).value = originalText;
}
</script></body>
</html>—- — —-
<?php
$decrypted_text = “”;
$error = “”;if ($_SERVER[“REQUEST_METHOD”] == “POST”) {
$encrypted = trim($_POST[“encrypted”] ?? “”);
$key = trim($_POST[“key”] ?? “”);if (empty($encrypted) || empty($key)) {
$error = “Metin ve anahtar boş olamaz!”;
} else {
function aes_decrypt($encrypted, $key) {
$data = base64_decode($encrypted);
if (!$data || strlen($data) < 16) {
return false;
}$iv = substr($data, 0, 16); // İlk 16 byte IV
$ciphertext = substr($data, 16); // Geri kalan şifreli metin$key = hash(‘sha256’, $key, true); // AES-256 için 32 byte anahtar oluştur
$decrypted = openssl_decrypt($ciphertext, “aes-256-cbc”, $key, OPENSSL_RAW_DATA, $iv);
return $decrypted !== false ? $decrypted : null;
}$decrypted_text = aes_decrypt($encrypted, $key);
if (!$decrypted_text) {
$error = “Hatalı anahtar veya şifrelenmiş metin!”;
}
}
}
?><!DOCTYPE html>
<html lang=”tr”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<title>AES Şifre Çözme</title>
<link href=”https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css” rel=”stylesheet”>
</head>
<body class=”bg-light”><div class=”container mt-5″>
<h2 class=”text-center”>AES Şifre Çözme</h2>
<div class=”card p-4 shadow”>
<form method=”POST”>
<div class=”mb-3″>
<label for=”encrypted” class=”form-label”>Şifreli Metin:</label>
<textarea class=”form-control” id=”encrypted” name=”encrypted” rows=”2″><?= htmlspecialchars($_POST[“encrypted”] ?? “”) ?></textarea>
</div>
<div class=”mb-3″>
<label for=”key” class=”form-label”>Şifreleme Anahtarı:</label>
<input type=”text” class=”form-control” id=”key” name=”key” value=”<?= htmlspecialchars($_POST[“key”] ?? “”) ?>”>
</div>
<button type=”submit” class=”btn btn-danger w-100″>Çöz</button>
</form><?php if ($decrypted_text): ?>
<div class=”alert alert-success mt-3″>
<strong>Çözülen Metin:</strong> <?= htmlspecialchars($decrypted_text) ?>
</div>
<?php elseif ($error): ?>
<div class=”alert alert-danger mt-3″><?= htmlspecialchars($error) ?></div>
<?php endif; ?>
</div>
</div></body>
</html> -
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.