[PHP] 纯文本查看 复制代码
<?php
// 加载OpenSSL库函数
if (!extension_loaded('openssl')) {
die('OpenSSL PHP 扩展未安装');
}
// RC4 加密函数
function rc4EncryptWithSalt($key, $plaintext) {
// 生成盐值
$salt = openssl_random_pseudo_bytes(8);
// 生成密钥的派生键
$salted = '';
$dx = '';
while (strlen($salted) < 48) {
$dx = md5($dx . $key . $salt, true);
$salted .= $dx;
}
$key = substr($salted, 0, 32);
// 使用 RC4 加密
$encrypted_data = openssl_encrypt($plaintext, 'rc4', $key, OPENSSL_RAW_DATA);
// 返回带有 "Salted__" 前缀和盐值的结果
return base64_encode("Salted__" . $salt . $encrypted_data);
}
// RC4 解密函数
function rc4DecryptWithSalt($key, $encryptedText) {
// Base64 解码
$data = base64_decode($encryptedText);
// 检查是否包含正确的 "Salted__" 前缀
$salted = substr($data, 0, 8);
if ($salted !== "Salted__") {
die("Invalid encrypted text format.");
}
// 提取盐值
$salt = substr($data, 8, 8);
$encrypted_data = substr($data, 16);
// 生成密钥的派生键
$salted = '';
$dx = '';
while (strlen($salted) < 48) {
$dx = md5($dx . $key . $salt, true);
$salted .= $dx;
}
$key = substr($salted, 0, 32);
// 使用 RC4 解密
$decrypted_data = openssl_decrypt($encrypted_data, 'rc4', $key, OPENSSL_RAW_DATA);
return $decrypted_data;
}
// 测试加密和解密
$key = '121';
$plaintext = 'Hello, World!';
$js_text = 'U2FsdGVkX191Ooi18dexQGmIqGJBLczSzX5uKGQ=';//js端的加密结果
// 加密
$encryptedText = rc4EncryptWithSalt($key, $plaintext);
echo "Encrypted Text: " . $encryptedText . "\n";
// 解密
$decryptedText = rc4DecryptWithSalt($key, $js_text);
echo "Decrypted Text: " . $decryptedText . "\n";
经过测试,应该是符合你的要求了 |