PHP加密解密用于字符串几种方法 - 汇站网

PHP加密解密用于字符串几种方法

2024-10-03 0 213

PHP加密解密用于字符串几种方法

前言:

随着信息技术的突飞猛进,信息安全成为了数字时代的关键议题。在这一背景下,信息加密与解密技术显得尤为关键。PHP,作为一种在 Web 开发领域广受欢迎的编程语言,其在信息加密与解密方面的应用同样不容忽视。

本文旨在探讨 PHP 环境下实现信息加密与解密的多种策略,以期为开发者提供实用的指导和参考。

(1)


function encryptDecrypt($key, $string, $decrypt)
{
	if ($decrypt) {
		$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");
		return $decrypted;
	} else {
		$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
		return $encrypted;
	}
}

//加密:"z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=" 
echo encryptDecrypt('password', 'Helloweba 欢迎您', 0);
//解密:"Helloweba 欢迎您" 
echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=', 1);

(2)


//加密函数 
function lock_url($txt, $key = 'liiu')
{
	$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
	$nh = rand(0, 64);
	$ch = $chars[$nh];
	$mdKey = md5($key . $ch);
	$mdKey = substr($mdKey, $nh % 8, $nh % 8 + 7);
	$txt = base64_encode($txt);
	$tmp = '';
	$i = 0;
	$j = 0;
	$k = 0;
	for ($i = 0; $i < strlen($txt); $i++) {
		$k = $k == strlen($mdKey) ? 0 : $k;
		$j = ($nh + strpos($chars, $txt[$i]) + ord($mdKey[$k++])) % 64;
		$tmp .= $chars[$j];
	}
	return urlencode($ch . $tmp);
}
//解密函数 
function unlock_url($txt, $key = 'liiu')
{
	$txt = urldecode($txt);
	$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);
}

(3)


//加密函数 
function lock_url($txt, $key = 'str')
{
	$txt = $txt . $key;
	$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
	$nh = rand(0, 64);
	$ch = $chars[$nh];
	$mdKey = md5($key . $ch);
	$mdKey = substr($mdKey, $nh % 8, $nh % 8 + 7);
	$txt = base64_encode($txt);
	$tmp = '';
	$i = 0;
	$j = 0;
	$k = 0;
	for ($i = 0; $i < strlen($txt); $i++) {
		$k = $k == strlen($mdKey) ? 0 : $k;
		$j = ($nh + strpos($chars, $txt[$i]) + ord($mdKey[$k++])) % 64;
		$tmp .= $chars[$j];
	}
	return urlencode(base64_encode($ch . $tmp));
}
//解密函数 
function unlock_url($txt, $key = 'str')
{
	$txt = base64_decode(urldecode($txt));
	$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 trim(base64_decode($tmp), $key);
}

(4)


function passport_encrypt($txt, $key = 'liiu')
{
	srand((float)microtime() * 1000000);
	$encrypt_key = md5(rand(0, 32000));
	$ctr = 0;
	$tmp = '';
	for ($i = 0; $i < strlen($txt); $i++) {
		$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
		$tmp .= $encrypt_key[$ctr] . ($txt[$i] ^ $encrypt_key[$ctr++]);
	}
	return urlencode(base64_encode(passport_key($tmp, $key)));
}

function passport_decrypt($txt, $key = 'liiu')
{
	$txt = passport_key(base64_decode(urldecode($txt)), $key);
	$tmp = '';
	for ($i = 0; $i < strlen($txt); $i++) {
		$md5 = $txt[$i];
		$tmp .= $txt[++$i] ^ $md5;
	}
	return $tmp;
}

function passport_key($txt, $encrypt_key)
{
	$encrypt_key = md5($encrypt_key);
	$ctr = 0;
	$tmp = '';
	for ($i = 0; $i < strlen($txt); $i++) {
		$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
		$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
	}
	return $tmp;
}

$txt = "1";
$key = "testkey";
$encrypt = passport_encrypt($txt, $key);
$decrypt = passport_decrypt($encrypt, $key);

echo $encrypt . "<br>";
echo $decrypt . "<br>";

(5)


//函数 authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE 表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。 
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0)
{
	// 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙	
	$ckey_length = 4;
	// 密匙	
	$key = md5($key ? $key : $GLOBALS['discuz_auth_key']);
	// 密匙 a 会参与加解密	
	$keya = md5(substr($key, 0, 16));
	// 密匙 b 会用来做数据完整性验证	
	$keyb = md5(substr($key, 16, 16));
	// 密匙 c 用于变化生成的密文	
	$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';
	// 参与运算的密匙	
	$cryptkey = $keya . md5($keya . $keyc);
	$key_length = strlen($cryptkey);
	// 明文,前 10 位用来保存时间戳,解密时验证数据有效性,10 到 26 位用来保存$keyb(密匙 b),  
	//解密时会通过这个密匙验证数据完整性	
	// 如果是解码的话,会从第$ckey_length 位开始,因为密文前$ckey_length 位保存 动态密匙,以保证解密正确	
	$string = $operation == 'DECODE' ? 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 == '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 {
		// 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因	
		// 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用 base64 编码	
		return $keyc . str_replace('=', '', base64_encode($result));
	}
}

$str = 'abcdef';
$key = 'www.helloweba.com';
echo authcode($str, 'ENCODE', $key, 0); //加密  
$str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk';
echo authcode($str, 'DECODE', $key, 0); //解密  

(6)


/**
 * $string:需要加解密的字符串;
 * $operation:E 表示加密,D 表示解密;
 * $key:自定义密匙
 */
function string($string, $operation, $key = '')
{
	$key = md5($key);
	$key_length = strlen($key);
	$string = $operation == 'D' ? base64_decode($string) : substr(md5($string . $key), 0, 8) . $string;
	$string_length = strlen($string);
	$rndkey = $box = array();
	$result = '';
	for ($i = 0; $i <= 255; $i++) {
		$rndkey[$i] = ord($key[$i % $key_length]);
		$box[$i] = $i;
	}
	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 == 'D') {
		if (substr($result, 0, 8) == substr(md5(substr($result, 8) . $key), 0, 8)) {
			return substr($result, 8);
		} else {
			return '';
		}
	} else {
		return str_replace('=', '', base64_encode($result));
	}
}

转载请注明:汇站网 » PHP 加密解密用于字符串几种方法

收藏 (0)

微信扫一扫

支付宝扫一扫

点赞 (0)

免责声明

本资源仅用于个人学习和研究使用,禁止用于任何商业环境!

 1.  本网站名称:汇站网
 2.  本站永久网址:https://www.huizhanii.com/
 3.  本站所有资源来源于网友投稿和高价购买,所有资源仅对编程人员及源代码爱好者开放下载做参考和研究及学习,本站不提供任何技术服务!
 4.  本站所有资源的展示图片和信息不代表本站的立场!本站只是储蓄平台及搬运
 5.  下载者禁止在服务器和虚拟机下进行搭建运营,本站所有资源不支持联网运行!只允许调试,参考和研究!!!!
 6.  未经原版权作者许可,禁止用于任何商业环境,任何人不得擅作它用,下载者不得用于违反国家法律,否则发生的一切法律后果自行承担!
 7.  为尊重作者版权,请在下载24小时内删除!请购买原版授权作品,支持你喜欢的作者,谢谢!
 8.  若资源侵犯了您的合法权益, 请持您的版权证书和相关原作品信息来信通知我们请来信     通知我们 我们会及时删除,给您带来的不便,我们深表歉意!
 9.  如下载链接失效、广告或者压缩包问题请联系站长处理!
 10.  如果你也有好源码或者教程,可以发布到网站,分享有金币奖励和额外收入!
 11.  本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
 12.  因源码具有可复制性,一经赞助 ,不得以任何形式退款。
 13.  更多详情请点击查看

汇站网 技术安全 PHP加密解密用于字符串几种方法 https://www.huizhanii.com/37906.html

汇站

站长资源下载中心-找源码上汇站

常见问题
  • 如果付款后没有弹出下载页面,多刷新几下,有问题联系客服!
查看详情
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情

相关文章

发表评论
暂无评论
  随机评论 表情开关按钮图片
表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情 表情表情表情表情表情表情表情 表情表情表情表情表情表情表情表情
登录后评论
联系官方客服

为您解决烦忧 - 24小时在线 专业服务

(汇站网)一个专注站长资源的平台网站,提供最新的网站模板和整站源码,内容包含各类精品网页模板,企业网站模板,网站模板,DIV+CSS模板,织梦模板,帝国cms模板,discuz模板,wordpress模板,个人博客论坛模板,上千种免费网页模板下载尽在汇站网.找源码上汇站.huizhanii.com