目录
- class AES {
- private $key;
- private $iv;
-
- public function __construct($key, $iv) {
- $this->key = $key;
- $this->iv = $iv;
- }
-
- public function encrypt($data) {
- $encrypted = openssl_encrypt($data, 'AES-128-ECB', $this->key, OPENSSL_RAW_DATA);
- return base64_encode($encrypted);
- }
-
- public function decrypt($encryptedData) {
- $decrypted = openssl_decrypt(base64_decode($encryptedData), 'AES-128-ECB', $this->key, OPENSSL_RAW_DATA);
- return $decrypted;
- }
-
- public function encryptCBC($data) {
- $encrypted = openssl_encrypt($data, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->iv);
- return base64_encode($encrypted);
- }
-
- public function decryptCBC($encryptedData) {
- $decrypted = openssl_decrypt(base64_decode($encryptedData), 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->iv);
- return $decrypted;
- }
- }
- // 使用示例:
- $key = '0123456789abcdef'; // 16字节长度的密钥
- $iv = 'fedcba9876543210'; // 16字节长度的初始向量
- $aes = new AES($key, $iv);
- $data = 'Hello, World!';
- $encryptedECB = $aes->encrypt($data);
- echo 'AES-128-ECB加密后的数据:' . $encryptedECB . "\n";
- $decryptedECB = $aes->decrypt($encryptedECB);
- echo 'AES-128-ECB解密后的数据:' . $decryptedECB . "\n";
- $encryptedCBC = $aes->encryptCBC($data);
- echo 'AES-256-CBC加密后的数据:' . $encryptedCBC . "\n";
- $decryptedCBC = $aes->decryptCBC($encryptedCBC);
- echo 'AES-256-CBC解密后的数据:' . $decryptedCBC . "\n";
- class Encrypt_3DES
- {
- //加密秘钥,
- private $_key;
- private $_iv;
- public function __construct($key, $iv)
- {
- $this->_key = $key;
- $this->_iv = $iv;
- }
- /**
- * 对字符串进行3DES加密
- * @param string 要加密的字符串
- * @return mixed 加密成功返回加密后的字符串,否则返回false
- */
- public function encrypt3DES($str)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, "", MCRYPT_MODE_CBC, "");
- if ($td === false) {
- return false;
- }
- //检查加密key,iv的长度是否符合算法要求
- $key = $this->fixLen($this->_key, mcrypt_enc_get_key_size($td));
- $iv = $this->fixLen($this->_iv, mcrypt_enc_get_iv_size($td));
- if (mcrypt_generic_init($td, $key, $iv) !== 0) {
- return false;
- }
- $result = mcrypt_generic($td, $str);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return base64_encode($result); // 对加密后的结果进行Base64编码
- }
- /**
- * 对加密的字符串进行3DES解密
- * @param string 要解密的字符串
- * @return mixed 解密成功返回解密后的字符串,否则返回false
- */
- public function decrypt3DES($str)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, "", MCRYPT_MODE_CBC, "");
- if ($td === false) {
- return false;
- }
- //检查加密key,iv的长度是否符合算法要求
- $key = $this->fixLen($this->_key, mcrypt_enc_get_key_size($td));
- $iv = $this->fixLen($this->_iv, mcrypt_enc_get_iv_size($td));
- if (mcrypt_generic_init($td, $key, $iv) !== 0) {
- return false;
- }
- $str = base64_decode($str); // 对加密字符串进行Base64解码
- $result = mdecrypt_generic($td, $str);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return $this->strUnPad($result);
- }
- /**
- * 返回适合算法长度的key,iv字符串
- * @param string $str key或iv的值
- * @param int $td_len 符合条件的key或iv长度
- * @return string 返回处理后的key或iv值
- */
- private function fixLen($str, $td_len)
- {
- $str_len = strlen($str);
- if ($str_len > $td_len) {
- return substr($str, 0, $td_len);
- } else if ($str_len < $td_len) {
- return str_pad($str, $td_len, "\0");
- }
- return $str;
- }
- /**
- * 返回适合算法的分组大小的字符串长度,末尾使用\0补齐
- * @param string $str 要加密的字符串
- * @param int $td_group_len 符合算法的分组长度
- * @return string 返回处理后字符串
- */
- private function strPad($str, $td_group_len)
- {
- $padding_len = $td_group_len - (strlen($str) % $td_group_len);
- return str_pad($str, strlen($str) + $padding_len, "\0");
- }
- /**
- * 返回适合算法的分组大小的字符串长度,去除末尾的\0
- * @param string $str 要解密的字符串
- * @return string 返回处理后字符串
- */
- private function strUnPad($str)
- {
- return rtrim($str, "\0");
- }
- }
- $key = '1a2bc@';
- $iv = '12345678'; // 将iv改为字符串形式
- $str = "abcd123";
- $encrypt = new Encrypt_3DES($key, $iv);
- $jiaData = $encrypt->encrypt3DES($str);
- $jieData = $encrypt->decrypt3DES($jiaData);
- echo "未加密字符串:".$str;
- echo "\n";
- echo "加密字符串:".$jiaData;
- echo "\n";
- echo "解密密字符串:".$jieData;
- class TripleDes {
- private $key;
- private $iv;
-
- public function __construct($key, $iv) {
- $this->key = $key;
- $this->iv = $iv;
- }
-
- public function encrypt($data) {
- $encrypted = openssl_encrypt($data, 'des-ede3-cbc', $this->key, OPENSSL_RAW_DATA, $this->iv);
- return base64_encode($encrypted);
- }
-
- public function decrypt($encryptedData) {
- $decrypted = openssl_decrypt(base64_decode($encryptedData), 'des-ede3-cbc', $this->key, OPENSSL_RAW_DATA, $this->iv);
- return $decrypted;
- }
- }
- $key = "2312342132";
- $iv = "12345678"; // 初始化向量长度必须为8位
- $des = new TripleDes($key, $iv);
- $data = "adsadb123";
- echo "要加密的数据:{$data}\n";
- $encrypted = $des->encrypt($data);
- echo "加密后的数据:" . $encrypted . "\n";
- $decrypted = $des->decrypt($encrypted);
- echo "解密后的数据:" . $decrypted . "\n";
-
-
- /**
- * RSA签名类
- */
- class Rsa
- {
- public $publicKey = '';
- public $privateKey = '';
- private $_privKey;
-
- /**
- * * private key
- */
- private $_pubKey;
-
- /**
- * * public key
- */
- private $_keyPath;
-
- /**
- * * the keys saving path
- */
-
- /**
- * * the construtor,the param $path is the keys saving path
- * @param string $publicKey 公钥
- * @param string $privateKey 私钥
- */
- public function __construct($publicKey = null, $privateKey = null)
- {
-
- $this->setKey($publicKey, $privateKey);
- }
-
- /**
- * 设置公钥和私钥
- * @param string $publicKey 公钥
- * @param string $privateKey 私钥
- */
- public function setKey($publicKey = null, $privateKey = null)
- {
- if (!is_null($publicKey)) {
- $this->publicKey = $publicKey;
- }
- if (!is_null($privateKey)) {
- $this->privateKey = $privateKey;
- }
- }
-
- /**
- * * setup the private key
- */
- private function setupPrivKey()
- {
- if (is_resource($this->_privKey)) {
- return true;
- }
- $pem = chunk_split($this->privateKey, 64, "\n");
- $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n";
-
- $this->_privKey = openssl_pkey_get_private($pem);
- return true;
- }
-
- /**
- * * setup the public key
- */
- private function setupPubKey()
- {
- if (is_resource($this->_pubKey)) {
- return true;
- }
- $pem = chunk_split($this->publicKey, 64, "\n");
- $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n";
- $this->_pubKey = openssl_pkey_get_public($pem);
- return true;
- }
-
- /**
- * * encrypt with the private key
- */
- public function privEncrypt($data)
- {
- if (!is_string($data)) {
- return null;
- }
- $this->setupPrivKey();
-
- $r = openssl_private_encrypt($data, $encrypted, $this->_privKey);
- if ($r) {
- return base64_encode($encrypted);
- }
- return null;
- }
-
- /**
- * * decrypt with the private key
- */
- public function privDecrypt($encrypted)
- {
- if (!is_string($encrypted)) {
- return null;
- }
- $this->setupPrivKey();
- $encrypted = base64_decode($encrypted);
- $r = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);
- if ($r) {
- return $decrypted;
- }
- return null;
- }
-
- /**
- * * encrypt with public key
- */
- public function pubEncrypt($data)
- {
- if (!is_string($data)) {
- return null;
- }
- $this->setupPubKey();
- $r = openssl_public_encrypt($data, $encrypted, $this->_pubKey);
- if ($r) {
- return base64_encode($encrypted);
- }
- return null;
- }
-
- /**
- * * decrypt with the public key
- */
- public function pubDecrypt($crypted)
- {
- if (!is_string($crypted)) {
- return null;
- }
- $this->setupPubKey();
- $crypted = base64_decode($crypted);
- $r = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);
- if ($r) {
- return $decrypted;
- }
- return null;
- }
-
- /**
- * 构造签名
- * @param string $dataString 被签名数据
- * @return string
- */
- public function sign($dataString)
- {
- $this->setupPrivKey();
- $signature = false;
- openssl_sign($dataString, $signature, $this->_privKey);
- return base64_encode($signature);
- }
-
- /**
- * 验证签名
- * @param string $dataString 被签名数据
- * @param string $signString 已经签名的字符串
- * @return number 1签名正确 0签名错误
- */
- public function verify($dataString, $signString)
- {
- $this->setupPubKey();
- $signature = base64_decode($signString);
- $flg = openssl_verify($dataString, $signature, $this->_pubKey);
- return $flg;
- }
-
- public function __destruct()
- {
- is_resource($this->_privKey) && @openssl_free_key($this->_privKey);
- is_resource($this->_pubKey) && @openssl_free_key($this->_pubKey);
- }
- }
- $publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKZ1mKTymRoGKnHiP1xAy4aiyt5r0BscCZnDAonCrMFZ4kBGriPNHxEaLr5lfBnMKw7k6i+2dsFPSEZooTvqtPUCAwEAAQ==';
- $privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApnWYpPKZGgYqceI/XEDLhqLK3mvQGxwJmcMCicKswVniQEauI80fERouvmV8GcwrDuTqL7Z2wU9IRmihO+q09QIDAQABAkBunx3nGHXYjppsfn++7iyTd+I7+Agfy/0xWyB3rpEiGGgfemjcRFaeq5SC2vUNXsrEOY5gbUSQmFxH//Cym18NAiEA1z1cZx/Q9cbIjFPwp1a+K5CVFDXDcfbi/AQgAkVs0/cCIQDF+2fr23AoBslcOC4S0yAx94AbgxCntYuRqztxybsrcwIgMW86ZcT87TX2oaQ1xXk6vC68zqN6fBZEE7Wu1Fa1pAkCIElmOJP3qfAc/AAlj+dIwLHlqWgJwl3674CU9Bfui2bDAiEA0CKJpF8x7KANCcopEQC93PsbIztuML322LOfDV1Lw/k=';
- $rsa=new Rsa($publicKey,$privateKey);
- $str="abc";
- echo "原始数据:".$str;
- echo "
"; - $res=$rsa->privEncrypt($str);
- echo "私钥加密数据:".$res;
- echo "
"; -
- $res2=$rsa->pubDecrypt($res);
- echo "公钥解密数据:".$res2;
- echo "
"; -
-
- $res3=$rsa->pubEncrypt($str);
- echo "公钥加密数据:".$res3;
- echo "
"; -
- $res4=$rsa->privDecrypt($res3);
- echo "私钥解密数据:".$res4;
- echo "
"; -
- echo "签名数据:".$str;
- $res5=$rsa->sign($str);
- echo "
"; - echo "签名结果:".$res5;
- $res6=$rsa->verify($str,$res5);
- echo "
"; - echo "验证签结果:".$res6;
-
- function encrypt($data, $key)
- {
- // 将字符串转化为字节数组
- $data = str_split($data);
-
- // 将密钥转化为字节数组
- $key = str_split($key);
-
- // 加密结果
- $result = '';
-
- foreach ($data as $index => $char) {
- // 获取密钥字符的 ASCII 值
- $keyChar = ord($key[$index % count($key)]);
-
- // 将字符的 ASCII 值与密钥字符的 ASCII 值进行异或运算
- $encryptedChar = ord($char) ^ $keyChar;
-
- // 将加密后的字符拼接到结果字符串中
- $result .= chr($encryptedChar);
- }
-
- // 将结果字符串转换为 base64 编码
- $result = base64_encode($result);
-
- // 返回加密结果
- return $result;
- }
-
- function decrypt($data, $key)
- {
- // 将 base64 编码字符串转换为普通字符串
- $data = base64_decode($data);
-
- // 将字符串转化为字节数组
- $data = str_split($data);
-
- // 将密钥转化为字节数组
- $key = str_split($key);
-
- // 解密结果
- $result = '';
-
- foreach ($data as $index => $char) {
- // 获取密钥字符的 ASCII 值
- $keyChar = ord($key[$index % count($key)]);
-
- // 将字符的 ASCII 值与密钥字符的 ASCII 值进行异或运算
- $decryptedChar = ord($char) ^ $keyChar;
-
- // 将解密后的字符拼接到结果字符串中
- $result .= chr($decryptedChar);
- }
-
- // 返回解密结果
- return $result;
- }
-
- // 使用示例
- $data = "Hello, World!";
- $key = "secretKey";
- $encryptedData = encrypt($data, $key);
- echo "加密后的数据: " . $encryptedData . "\n";
- $decryptedData = decrypt($encryptedData, $key);
- echo "解密后的数据: " . $decryptedData . "\n";
-
- function encrypt($data, $key) {
- $encryptedData = '';
- $keyLength = strlen($key);
- $dataLength = strlen($data);
- for ($i = 0; $i < $dataLength; $i++) {
- $encryptedData .= chr(ord($data[$i]) ^ ord($key[$i % $keyLength]));
- }
- return base64_encode($encryptedData);
- }
- function decrypt($data, $key) {
- $data = base64_decode($data);
- $decryptedData = '';
- $keyLength = strlen($key);
- $dataLength = strlen($data);
- for ($i = 0; $i < $dataLength; $i++) {
- $decryptedData .= chr(ord($data[$i]) ^ ord($key[$i % $keyLength]));
- }
- return $decryptedData;
- }
- // 使用示例
- $data = 'Hello, World!';
- $key = 'secretKey';
- $encryptedData = encrypt($data, $key);
- echo '加密后的数据: ' . $encryptedData . "\n";
- $decryptedData = decrypt($encryptedData, $key);
- echo '解密后的数据: ' . $decryptedData . "\n";
- function encrypt($data, $key) {
- $encryptedData = '';
- $keyLength = strlen($key);
- $dataLength = strlen($data);
- for ($i = 0; $i < $dataLength; $i++) {
- $encryptedData .= chr((ord($data[$i]) + ord($key[$i % $keyLength])) % 256);
- }
- return bin2hex($encryptedData);
- }
- function decrypt($data, $key) {
- $data = hex2bin($data);
- $decryptedData = '';
- $keyLength = strlen($key);
- $dataLength = strlen($data);
- for ($i = 0; $i < $dataLength; $i++) {
- $decryptedData .= chr((ord($data[$i]) - ord($key[$i % $keyLength]) + 256) % 256);
- }
- return $decryptedData;
- }
- // 使用示例
- $data = 'Hello, World!';
- $key = 'secretKey';
- $encryptedData = encrypt($data, $key);
- echo '加密后的数据: ' . $encryptedData . "\n";
- $decryptedData = decrypt($encryptedData, $key);
- echo '解密后的数据: ' . $decryptedData . "\n";
-
- $pex='pwd';
- $pwd='123456';
- $pwdMd5=md5($pex.$pwd);
- //校验
- $pwd=$_POST['pwd'];
- $postPwdMd5=md5($pex.$pwd);
- if($pwdMd5==$postPwdMd5){
- echo '密码正确';
- }else{
- echo '密码错误';
- }
- $pex='pwd';
- $pwd='123456';
- $pwdMd5=crypt($pwd,$pex);
- //校验
- $pwd=$_POST['pwd'];
- $postPwdMd5=crypt($pwd,$pex);
- if($pwdMd5==$postPwdMd5){
- echo '密码正确';
- }else{
- echo '密码错误';
- }
- $pex='pwd';
- $pwd='123456';
- $pwdMd5=sha1($pwd,$pex);
- //校验
- $pwd=$_POST['pwd'];
- $postPwdMd5=sha1($pwd,$pex);
- if($pwdMd5==$postPwdMd5){
- echo '密码正确';
- }else{
- echo '密码错误';
- }
- $pex='pwd';
- $pwd='123456';
- $pwdMd5=hash("sha256", $pwd.$pex);
- //校验
- $pwd=$_POST['pwd'];
- $postPwdMd5=hash("sha256", $pwd.$pex);
- if($pwdMd5==$postPwdMd5){
- echo '密码正确';
- }else{
- echo '密码错误';
- }
- $pex='pwd';
- $pwd='123456';
- $pwdMd5=password_hash($pwd.$pex,PASSWORD_BCRYPT);
- //校验
- $pwd=$_POST['pwd'];
- $postPwdMd5=password_verify($pwd.$pex,$pwdMd5);
- if($pwdMd5==$postPwdMd5){
- echo '密码正确';
- }else{
- echo '密码错误';
- }
-