创建一个PHP脚本,负责接收、加密和解密数据。
<?php
// 加载CryptoJS和OpenSSL库
function decrypt($data, $key) {
// 解密数据
$iv_length = openssl_cipher_iv_length('aes-256-cbc');
$data = json_decode($data, true);
$iv = base64_decode($data['iv']);
$encryptedData = base64_decode($data['value']);
return openssl_decrypt($encryptedData, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
}
function encrypt($data, $key) {
// 加密数据
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return json_encode(['iv' => base64_encode($iv), 'value' => base64_encode($encrypted)]);
}
$key = 'your-encryption-key'; // 使用安全的密钥
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$json = file_get_contents('php://input');
$request = json_decode($json, true);
// 解密请求数据
$decryptedData = decrypt($request['data'], $key);
// 处理解密后的数据
echo json_encode(['decrypted' => $decryptedData]);
} else {
// 示例:加密并返回初始数据
$initialData = "Sensitive Data";
$encryptedData = encrypt($initialData, $key);
echo json_encode(['encrypted' => $encryptedData]);
}
?>
使用JavaScript(比如通过AJAX)发送加密后的数据给PHP脚本:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
<script>
function sendData() {
const key = 'your-encryption-key'; // 使用安全的密钥
const data = { sensitiveData: "Hello, World!" };
const iv = CryptoJS.lib.WordArray.random(16);
const encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), key, {
iv: iv
});
const payload = {
iv: iv.toString(CryptoJS.enc.Base64),
value: encrypted.toString()
};
fetch('your_script.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ data: payload })
})
.then(response => response.json())
.then(result => console.log(result));
}
// 调用函数发送数据
sendData();
</script>
访问和测试
- 访问你的PHP脚本(例如
your_script.php
),初始加载时将返回加密的数据。 - 使用JavaScript的
sendData()
函数发送加密的数据到PHP脚本。 - 在浏览器的开发者工具中查看网络请求,确保发送的请求体是加密后的数据。