PHP中如何自定义加密函数,有几种方法
导读:这篇文章给大家分享的是“PHP中如何自定义加密函数,有几种方法”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“PHP中如何自定义加密函数,有几种方法”吧。...
这篇文章给大家分享的是“PHP中如何自定义加密函数,有几种方法”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“PHP中如何自定义加密函数,有几种方法”吧。
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这些加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。最常见的应用在用户登录以及一些API数据交换的场景。最常见的应用在用户登录以及一些API数据交换的场景。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。
u=3837593897,2803417633& fm=26& gp=0.jpg
废话不多说,直接上代码。
一、第一种针对于ID的可逆加密函数,也可以用作于邀请码之类的,解密后的数据比较简单
示例:lockcode(28)=》000X unlockcode('000X')=》28
//加密函数
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;
}
//解密函数
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;
}
二、第二种是加密函数是我在网上搜索来的,很好用,可逆加密,支持盐值参数
示例:encrypt('abcd','1234')=》nkiV93IfJ decrypt('nkiV93IfJ','1234')=》abcd
//加密函数
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;
$istrlen($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);
}
//解密函数
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;
$istrlen($txt);
$i++) {
$k = $k == strlen($mdKey) ? 0 : $k;
$j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);
while ($j0) $j+=64;
$tmp .= $chars[$j];
}
return base64_decode($tmp);
}
三、第三种跟上面的比较类似,也支持盐值参数
示例: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);
关于“PHP中如何自定义加密函数,有几种方法”的内容就介绍到这,感谢各位的阅读,相信大家对PHP中如何自定义加密函数,有几种方法已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: PHP中如何自定义加密函数,有几种方法
本文地址: https://pptw.com/jishu/652563.html
