日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP字符串增强加密

發布時間:2024/8/26 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP字符串增强加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 為了增加數據的安全性

  • 避免相同字符多次加密得到結果是一致的

  • 可以設置密文有效期

    加密方式:Mcrypt::encode($Str, $n);

    解密方式: Mcrypt::decode($Str, $n);

require("Mcrypt.class.php") ; $code = Mcrypt::encode('sajkfcasjcla','7580'); echo "code-".$code;$code_ans = Mcrypt::decode("$code",'7580'); echo "answer-".$code_ans;

?Mcrypt.class.php

/* * 字符串加解密類; * 一次一密;且定時解密有效 * 可用于加密&動態key生成*/ class Mcrypt{public $default_key = 'a!takA:dlmcldEv,e';/*** 字符加密,一次一密,可定時解密有效* @param string $string 原文* @param string $key 密鑰* @param int $expiry 密文有效期,單位s,0 為永久有效* @return string 加密后的內容 */ public static function encode($string,$key = '', $expiry = 0){$ckeyLength = 4;$key = md5($key ? $key : $this->default_key); //解密密匙$keya = md5(substr($key, 0, 16)); //做數據完整性驗證 $keyb = md5(substr($key, 16, 16)); //用于變化生成的密文 (初始化向量IV)$keyc = substr(md5(microtime()), - $ckeyLength);$cryptkey = $keya . md5($keya . $keyc); $keyLength = strlen($cryptkey);$string = sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string . $keyb), 0, 16) . $string;$stringLength = strlen($string);$rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $keyLength]);}$box = range(0, 255); // 打亂密匙簿,增加隨機性for($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;} // 加解密,從密匙簿得出密匙進行異或,再轉成字符$result = '';for($a = $j = $i = 0; $i < $stringLength; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;$tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));}$result = $keyc . str_replace('=', '', base64_encode($result));$result = str_replace(array('+', '/', '='),array('-', '_', '.'), $result);return $result;}/*** 字符解密,一次一密,可定時解密有效 * @param string $string 密文* @param string $key 解密密鑰* @return string 解密后的內容*/public static function decode($string,$key = '') {$string = str_replace(array('-', '_', '.'),array('+', '/', '='), $string);$ckeyLength = 4;$key = md5($key ? $key : $this->default_key); //解密密匙$keya = md5(substr($key, 0, 16)); //做數據完整性驗證 $keyb = md5(substr($key, 16, 16)); //用于變化生成的密文 (初始化向量IV)$keyc = substr($string, 0, $ckeyLength);$cryptkey = $keya . md5($keya . $keyc); $keyLength = strlen($cryptkey);$string = base64_decode(substr($string, $ckeyLength));$stringLength = strlen($string);$rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $keyLength]);}$box = range(0, 255);// 打亂密匙簿,增加隨機性for($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}// 加解密,從密匙簿得出密匙進行異或,再轉成字符$result = '';for($a = $j = $i = 0; $i < $stringLength; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;$tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));}if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0)&& substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {return substr($result, 26);} else {return '';} } }

總結

以上是生活随笔為你收集整理的PHP字符串增强加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。