search
HomeBackend DevelopmentPHP TutorialPHP string encryption function taken from Discuz_PHP tutorial

I found a great encryption and decryption function from discuz. The great thing about this function is that it can encrypt and restore the string within the specified time, and it cannot be restored after timeout.

In this way, we can use this function for many purposes, such as encrypted transmission of tokens for single sign-on, temporary passwords, etc.

Record it here for future application.

<?php
/**
* @param string $string 原文或者密文
* @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
* @param string $key 密钥
* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
*
* @example
*
*  $a = authcode('abc', 'ENCODE', 'key');
*  $b = authcode($a, 'DECODE', 'key');  // $b(abc)
*
*  $a = authcode('abc', 'ENCODE', 'key', 3600);
*  $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空
*/
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) 
{
	$ckey_length = 4;   
	// 随机密钥长度 取值 0-32;
	// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
	// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
	// 当此值为 0 时,则不产生随机密钥
	$key = md5($key ? $key : EABAX::getAppInf('KEY'));
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);
	$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('0d', $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 == 'DECODE') 
	{
		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));
	}
}
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/752513.htmlTechArticleI found a great encryption and decryption function from discuz. The great thing about this function is that it can encrypt and restore the string within the specified time, and it cannot be restored after timeout. So we can get...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
discuz database error怎么解决discuz database error怎么解决Nov 20, 2023 am 10:10 AM

discuz database error的解决办法有:1、检查数据库配置;2、确保数据库服务器正在运行;3、检查数据库表状态;4、备份数据;5、清理缓存;6、重新安装Discuz;7、检查服务器资源;8、联系Discuz官方支持。解决Discuz数据库错误需要从多个方面入手,逐步排查问题原因,并采取相应的措施进行修复。

discuz是什么意思discuz是什么意思Aug 23, 2023 am 10:27 AM

Discuz是一个功能强大的开源论坛软件,可以帮助用户快速搭建和管理一个社区论坛,提供了一套完整的论坛系统解决方案,Discuz是由名为Comsenz的中国公司开发和维护的,并且在全球范围内广泛使用。Discuz还有一个庞大的用户社区,可以提供技术支持和经验分享。

怎么去掉discuz版权怎么去掉discuz版权Feb 24, 2023 am 09:15 AM

去掉discuz版权的方法:1、找到并打开“header_common.htm”文件,删掉“Powered by Discuz!”内容;2、找到并打开“footer.htm”文件,删掉“Powered by ME”内容即可。

discuz论坛是什么discuz论坛是什么Jul 10, 2023 am 11:03 AM

discuz论坛是一种网络论坛软件,也称BBS,它是一种用于在互联网上建立论坛社区的程序系统。只哟中功能强大的论坛软件,可以帮助用户建立一个专业、完善的论坛社区,并且可以实现多种功能,如搭建用户注册、登录、查看主题、发布帖子、发表评论、设置版主等功能,让用户可以轻松地进行论坛社区的管理和维护。

什么是discuz什么是discuzAug 23, 2023 am 10:24 AM

discuz是一种功能强大、灵活性高、安全稳定的开源论坛软件,是一个基于PHP和MySQL的在线社区平台,提供了一个完整的论坛系统,包括帖子、主题、用户管理、权限控制等功能。Discuz还具备良好的用户体验和界面设计,以及庞大的开发者社区,可以为用户提供帮助和支持。

discuz如何修改头像discuz如何修改头像Aug 08, 2023 pm 03:53 PM

discuz修改头像的方法:1、登录Discuz后台,在网站根目录下找到“admin.php”或者“admin”目录并登录;2、进入用户管理,可以在左侧或者顶部的导航菜单中找到并点击进入;3、搜索用户,使用搜索功能来找到特定的用户;4、修改头像,在编辑页面,可以找到头像的选项并上传新的头像;5、保存修改;6、刷新页面即可。

discuz登录失败怎么解决discuz登录失败怎么解决Aug 03, 2023 pm 02:09 PM

discuz登录失败解决方法:1、仔细检查输入的用户名和密码是否正确,并尝试重置密码;2、确保浏览器允许使用Cookie,并将Discuz网站添加到信任的网站列表中;3、通过论坛首页上的“联系我们”或“举报”链接找到管理员的联系方式并解决;4、查看服务器日志来确定是否存在配置问题。

discuz如何删除模块discuz如何删除模块Aug 08, 2023 pm 02:59 PM

discuz删除模块的方法:1、登录后台管理,通过输入论坛的网址后跟上来进入后台;2、导航到模块管理,在菜单栏中,找到“模块管理”并点击进入;3、选择要删除的模块,在所有已安装模块的列表中,找到需要删除的模块,点击“删除”按钮;4、确认删除;5、清理缓存,在后台页面,找到“更新缓存”按钮并点击。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.