Rumah > pembangunan bahagian belakang > tutorial php > PHP加密解密类实例详解

PHP加密解密类实例详解

墨辰丷
Lepaskan: 2023-03-29 10:10:01
asal
1680 orang telah melayarinya

这篇文章主要介绍了PHP加密解密类实例的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

关键代码如下所示:

<?php
function i_array_column($input, $columnKey, $indexKey=null){
if(!function_exists(&#39;array_column&#39;)){
$columnKeyIsNumber = (is_numeric($columnKey))?true:false;
$indexKeyIsNull = (is_null($indexKey))?true :false;
$indexKeyIsNumber = (is_numeric($indexKey))?true:false;
$result = array();
foreach((array)$input as $key=>$row){
if($columnKeyIsNumber){
$tmp= array_slice($row, $columnKey, 1);
$tmp= (is_array($tmp) && !empty($tmp))?current($tmp):null;
}else{
$tmp= isset($row[$columnKey])?$row[$columnKey]:null;
}
if(!$indexKeyIsNull){
if($indexKeyIsNumber){
$key = array_slice($row, $indexKey, 1);
$key = (is_array($key) && !empty($key))?current($key):null;
$key = is_null($key)?0:$key;
}else{
$key = isset($row[$indexKey])?$row[$indexKey]:0;
}
}
$result[$key] = $tmp;
}
return $result;
}else{
return array_column($input, $columnKey, $indexKey);
}
}
function randcode($len, $mode = 2){
$rcode = &#39;&#39;;
switch($mode){
case 1: //去除0、o、O、l等易混淆字符
$chars = &#39;ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghijkmnpqrstuvwxyz&#39;;
break;
case 2: //纯数字
$chars = &#39;0123456789&#39;;
break;
case 3: //全数字+大小写字母
$chars = &#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz&#39;;
break;
case 4: //全数字+大小写字母+一些特殊字符
$chars = &#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz~!@#$%^&*()&#39;;
break;
}
$count = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $len; $i++) {
$rcode .= $chars[mt_rand(0, $count)];
}
return $rcode;
}
/**
* $string 明文或密文
* $operation 加密ENCODE或解密DECODE
* $key 密钥
* $expiry 密钥有效期
*/
function authcode($string, $operation = &#39;DECODE&#39;, $key = &#39;&#39;, $expiry = 0) {
$ckey_length = 4;
$key = md5($key);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == &#39;DECODE&#39; ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : &#39;&#39;;
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
$string = $operation == &#39;DECODE&#39; ? base64_decode(substr($string, $ckey_length)) : sprintf(&#39;%010d&#39;, $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = &#39;&#39;;
$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 == &#39;DECODE&#39;) {
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 &#39;&#39;;
}
} else {
return $keyc.str_replace(&#39;=&#39;, &#39;&#39;, base64_encode($result));
}
}
Salin selepas log masuk

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

php微信公众号模板消息群发功能详解

如何利用PHP实现防止表单重复提交

怎样利用thinkPHP实现三次登陆密码错误之后锁定账号

Atas ialah kandungan terperinci PHP加密解密类实例详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan