基於 XOR 運算與動態密鑰流,適合輕量級數據混淆,非軍用級安全。
<?php
// 輔助函數:密鑰流 XOR
function passport_key($str, $encrypt_key) {
$encrypt_key = md5($encrypt_key);
$ctr = 0; $tmp = '';
for ($i = 0; $i < strlen($str); $i++) {
$ctr = ($ctr == strlen($encrypt_key)) ? 0 : $ctr;
$tmp .= $str[$i] ^ $encrypt_key[$ctr++];
}
return $tmp;
}
// 加密
function passport_encrypt($str, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0; $tmp = '';
for ($i = 0; $i < strlen($str); $i++) {
$ctr = ($ctr == strlen($encrypt_key)) ? 0 : $ctr;
$tmp .= $encrypt_key[$ctr] . ($str[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp, $key));
}
// 解密
function passport_decrypt($str, $key) {
$str = passport_key(base64_decode($str), $key);
$tmp = '';
for ($i = 0; $i < strlen($str); $i++) {
$md5 = $str[$i];
$tmp .= $str[++$i] ^ $md5;
}
return $tmp;
}
// 測試
$str = '作者:www.jb51.net';
$key = '123456';
$enc = passport_encrypt($str, $key);
$dec = passport_decrypt($enc, $key);
echo "原文:$str
密文:$enc
譯文:$dec";
?>
注意:mcrypt 擴展自 PHP 7.1 棄用,PHP 7.2+ 移除。現代項目請改用 openssl_encrypt (AES)。本類僅供維護舊項目參考。
<?php
class DES {
private $key;
private $iv;
public function __construct($key, $iv = 0) {
$this->key = $key; // 必須 8 字節
$this->iv = ($iv == 0) ? $key : $iv;
}
// 加密 → 大寫十六進制字符串
public function encrypt($str) {
$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
$str = $this->pkcs5Pad($str, $size);
return strtoupper(bin2hex(mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv)));
}
// 解密
public function decrypt($str) {
$strBin = $this->hex2bin(strtolower($str));
$str = mcrypt_cbc(MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv);
return $this->pkcs5Unpad($str);
}
// 十六進制轉二進制
private function hex2bin($hexData) {
$binData = '';
for ($i = 0; $i < strlen($hexData); $i += 2) {
$binData .= chr(hexdec(substr($hexData, $i, 2)));
}
return $binData;
}
// PKCS5 填充
private function pkcs5Pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
// PKCS5 去填充
private function pkcs5Unpad($text) {
$pad = ord($text[strlen($text) - 1]);
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -$pad);
}
}
// 測試
$des = new DES('1234abcd');
$encrypted = $des->encrypt('12345678');
$decrypted = $des->decrypt($encrypted);
echo "$decrypted <=> $encrypted";
?>
<?php
// 加密傳遞參數
function args_encode($data) {
return is_array($data) ? base64_encode(http_build_query($data)) : false;
}
// 解密獲取參數
function getargs() {
parse_str(base64_decode($_GET['args']), $g);
return $g;
}
?>
openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv)sodium_crypto_secretbox() 簡單且抗邊信道攻擊。