php加密数据传输,php 加密解密算法 用于数据传输

/**

* 加密方法

* @param string $data 要加密的字符串

* @param string $key 加密密钥

* @param int $expire 过期时间 (单位:秒)

* @return string

*/

function _encrypt($data, $key, $expire = 0) {

$key = md5($key);

$data = base64_encode($data);

$x = 0;

$len = strlen($data);

$l = strlen($key);

$char = '';

for ($i = 0; $i < $len; $i++) {

if ($x == $l) $x=0;

$char .= substr($key, $x, 1);

$x++;

}

$str = sprintf('%010d', $expire ? $expire + time() : 0);

for ($i = 0; $i < $len; $i++) {

$str .= chr(ord(substr($data,$i,1)) + (ord(substr($char,$i,1)))%256);

}

$str = base64_encode($str);

$str = str_replace(array('=','+','/'),array('O0O0O','o000o','oo00o'),$str);

return $str;

}

/** * 解密方法

* @param string $data 要解密的字符串 (必须是think_encrypt方法加密的字符串)

* @param string $key 加密密钥

* @return string

*/

function _decrypt($data, $key){

$data = str_replace(array('O0O0O','o000o','oo00o'), array('=','+','/'),$data);

$key = md5($key);

$x = 0;

$data = base64_decode($data);

$expire = substr($data, 0, 10);

$data = substr($data, 10);

if($expire > 0 && $expire < time()) {

return null;

}

$len = strlen($data);

$l = strlen($key);

$char = $str = '';

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 base64_decode($str);

}

如何使用呢?很简单,只需要用下面的操作步骤进行操作即可。

// 数据加密

$data = '这是我要传递的数据';

$key = '这是我的密钥';

$expire = 3600*2;

$post = _encrypt($data,$key,$expire);

将$post传送到远方,并且用另外一个渠道把$key告知远方接受用户,再执行下面的代码解密。

// 数据解密

$post = '我收到的加密后数据';

$key = '我悄悄获得的密钥';

$data = _decrypt($post,$key);

$data就是对方想要传送的原始数据了。注意,由于我们规定了expire为两个小时,所以解密过程要在两个小时内完成哦~

标签:key,解密,substr,expire,str,数据传输,ord,php,data

来源: https://www.cnblogs.com/-mrl/p/10689145.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值