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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

strlen函数_四种好用的PHP自定义加密函数(可逆/不可逆)

發(fā)布時間:2025/3/15 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 strlen函数_四种好用的PHP自定义加密函数(可逆/不可逆) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項目中有時我們需要使用PHP將特定的信息進(jìn)行加密,也就是通過加密算法生成一個加密字符串,這些加密后的字符串可以通過解密算法進(jìn)行解密,便于程序?qū)饷芎蟮男畔⑦M(jìn)行處理。

最常見的應(yīng)用在用戶登錄以及一些API數(shù)據(jù)交換的場景。最常見的應(yīng)用在用戶登錄以及一些API數(shù)據(jù)交換的場景。加密解密原理一般都是通過一定的加密解密算法,將密鑰加入到算法中,最終得到加密解密結(jié)果。

廢話不多說,直接上代碼。

一、第一種針對于ID的可逆加密函數(shù),也可以用作于邀請碼之類的,解密后的數(shù)據(jù)比較簡單

示例:lockcode(28)=》000X unlockcode('000X')=》28

//加密函數(shù) function lockcode($code) {static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';$num = $code;$code = '';while ( $num > 0) {$mod = $num % 35;$num = ($num - $mod) / 35;$code = $source_string[$mod].$code;}if(empty($code[3]))$code = str_pad($code,4,'0',STR_PAD_LEFT);return $code; } //解密函數(shù) function unlockcode($code) {static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';if (strrpos($code, '0') !== false)$code = substr($code, strrpos($code, '0')+1);$len = strlen($code);$code = strrev($code);$num = 0;for ($i=0; $i < $len; $i++) {$num += strpos($source_string, $code[$i]) * pow(35, $i);}return $num; }

二、第二種是加密函數(shù)是我在網(wǎng)上搜索來的,很好用,可逆加密,支持鹽值參數(shù)

示例:

encrypt('abcd','1234')=》nkiV93IfJ decrypt('nkiV93IfJ','1234')=》abcd

//加密函數(shù) function encrypt($data,$key='CHENI'){ $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; $nh = rand(0,64); $ch = $chars[$nh]; $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $data= base64_encode($data); $tmp = ''; $i=0;$j=0;$k = 0; for ($i=0; $i<strlen($data); $i++) { $k = $k == strlen($mdKey) ? 0 : $k; $j = ($nh+strpos($chars,$data[$i])+ord($mdKey[$k++]))%64; $tmp .= $chars[$j]; } return urlencode($ch.$tmp); } //解密函數(shù) function decrypt($data,$key='CHENI'){$txt = urldecode($data); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; $ch = $txt[0]; $nh = strpos($chars,$ch); $mdKey = md5($key.$ch); $mdKey = substr($mdKey,$nh%8, $nh%8+7); $txt = substr($txt,1); $tmp = ''; $i=0;$j=0; $k = 0; for ($i=0; $i<strlen($txt); $i++) { $k = $k == strlen($mdKey) ? 0 : $k; $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]); while ($j<0) $j+=64; $tmp .= $chars[$j]; } return base64_decode($tmp); }

三、第三種跟上面的比較類似,也支持鹽值參數(shù)

示例:encrypt('abcd','1234')=》mZPHxw== decrypt('mZPHxw==','1234')=》abcd

function encrypt($data, $key) { $char="";$str="";$key = md5($key); $x = 0; $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= $key{$x}; $x++; } for ($i = 0; $i < $len; $i++){ $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256); } return base64_encode($str); } function decrypt($data, $key) { $key = md5($key); $x = 0; $data = base64_decode($data); $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l){ $x = 0;} $char .= substr($key, $x, 1); $x++; } for ($i = 0; $i < $len; $i++){ if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))){ $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1))); }else{ $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1))); } } return $str; }

四、這個是我用過最好用的一個了,discuz中使用的加密解密算法

//加密算法function authcode($string,$key='',$operation=false,$expiry=0){$ckey_length = 4;$key = md5($key ? $key : DEFAULT_KEYS);$keya = md5(substr($key, 0, 16));$keyb = md5(substr($key, 16, 16));$keyc = $ckey_length ? ($operation? substr($string, 0, $ckey_length):substr(md5(microtime()), -$ckey_length)) : '';$cryptkey = $keya.md5($keya.$keyc);$key_length = strlen($cryptkey);$string = $operation? base64_decode(substr($string, $ckey_length)) :sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;$string_length = strlen($string);$result = '';$box = range(0, 255);$rndkey = array();for($i = 0; $i <= 255; $i++) {$rndkey[$i] = ord($cryptkey[$i % $key_length]);}for($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}for($a = $j = $i = 0; $i < $string_length; $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($operation) {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 '';}} else {return $keyc.str_replace('=', '', base64_encode($result));}}echo authcode('123456','key');echo '<br>';echo authcode('7d49kn9k07uSBZvha8as+/qm4UoLfpy88PFg12glPeDtlzc','key',true);

總結(jié)

以上是生活随笔為你收集整理的strlen函数_四种好用的PHP自定义加密函数(可逆/不可逆)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。