导航:首页 > 编程语言 > php字符串加解密

php字符串加解密

发布时间:2022-04-27 18:13:49

php加密解密问题,一道10000+公司的phper,大公司的php面试题。

<?php
/**
*加密解密类
*该算法仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密。
*@author深秋的竹子
*@versionalpha
*@加密原则标记长度+补位+数字替换
*@加密步骤:
*将a-z,A-Z,0-962个字符打乱,取前M(数字最大的位数)位作为标记长度字符串,取第M+1到第M+10位为数字替换字符串,剩余的为补位字符串
*1.计算数字长度n,取乱码的第n位作为标记长度。
*2.计算补位的长度,加密串的长度N-1-n为补位的长度。根据指定的算法得到补位字符串。
*3.根据数字替换字符串替换数字,得到数字加密字符串。
*标记长度字符+补位字符串+数字加密字符串=加密串
*Usage:
*$obj=newXDeode(9);
*$e_txt=$obj->encode(123);
*echo$e_txt.'<br/>';
*echo$key->decode($e_txt);
*/
classXDeode{
private$strbase="";
private$key,$length,$codelen,$codenums,$codeext;
function__construct($length=9,$key=2543.5415412812){
$this->key=$key;
$this->length=$length;
$this->codelen=substr($this->strbase,0,$this->length);
$this->codenums=substr($this->strbase,$this->length,10);
$this->codeext=substr($this->strbase,$this->length+10);
}

functionencode($nums){
$rtn="";
$numslen=strlen($nums);
//密文第一位标记数字的长度
$begin=substr($this->codelen,$numslen-1,1);
//密文的扩展位
$extlen=$this->length-$numslen-1;
$temp=str_replace('.','',$nums/$this->key);
$temp=substr($temp,-$extlen);
$arrextTemp=str_split($this->codeext);
$arrext=str_split($temp);
foreach($arrextas$v){
$rtn.=$arrextTemp[$v];
}
$arrnumsTemp=str_split($this->codenums);
$arrnums=str_split($nums);
foreach($arrnumsas$v){
$rtn.=$arrnumsTemp[$v];
}
return$begin.$rtn;
}

functiondecode($code){
$begin=substr($code,0,1);
$rtn='';
$len=strpos($this->codelen,$begin);
if($len!==false){
$len++;
$arrnums=str_split(substr($code,-$len));
foreach($arrnumsas$v){
$rtn.=strpos($this->codenums,$v);
}
}

return$rtn;
}
}

一个PHP针对数字的加密解密类

你可以参照这个来写

② 如何写PHP加密算法

第一步.变量名称混淆[可选]
第二步.将所有代码用16进制字符或八进制字符表示组成字符串,如\x78,\187
第三步.将组合成的字符串先base64编码在base64解码,如base64_decode(base64_encode(str));
第四步.将组合成的字符串放入到eval()函数中执行

第五步 伪装整个页面

ok完成

当然也可以自己写个加密解密函数,加入到文件里面。

③ PHP加密解密函数 回答有追加!!!

我这里用到了一个函数,与你上面说的解密函数类似,不过是加密解密都和在一起的

/*
* $string: 明文 或 密文
* $operation:DECODE表示解密,其它表示加密
* $key: 密匙
* $expiry:密文有效期
* */
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0)
{
// 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙
$ckey_length = 4;

// 密匙
$key = md5($key ? $key : 'livcmsencryption ');
// 密匙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') {
// substr($result, 0, 10) == 0 验证数据有效性
// substr($result, 0, 10) - time() > 0 验证数据有效性
// substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性
// 验证数据有效性,请看未加密明文的格式
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));
}
}

④ php md5加密可以破解吗

虽然md5是不可逆的加密方式,但是网上还是可以解密的,在线解密md5运用的是一次md5加密方式去解析的,解析的方式也是运用强大的数据内容一
一去对比的,找到匹配的就可以了。在程序中你可以多次用md5加密和字符串截取,或者追加字符串,比如密码,传来的值用同样的方式加密和数据库保存的密码做对比就可以了,这样安全性会很高,再强大的md5数据库内容也找不到你设置的密码

⑤ 在php5中md5在加密字符串后如何解密

MD5加密是不能逆运算的,现在的破解大都是穷尽法,就是有一个庞大的MD5码对照表放在那里,然后一个一个去对照着查。

⑥ PHP解密Unicode及Escape加密字符串

在json中不支持中文,用它传送中文数据就会出现数据丢失或者乱码,必须在传送前对要发送的字符串进行编码,由于传送过去需要用js进行数据解析,考虑
到js中有unescape函数,故若在php中有个escape函数,对数据进行编码,在客户端用unescape进行
解码,这样就会方便很多。
本文给大家分享一个PHP解密Unicode及Escape加密字符串函数
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
?php
function
uni_decode($s)
{
preg_match_all('/#([0-9]{2,5});/',
$s,
$html_uni);
preg_match_all('/[%]u([0-9a-f]{4})/ie',
$s,
$js_uni);
$source
=
array_merge($html_uni[0],
$js_uni[0]);
$js
=
array();
for($i=0;$icount($js_uni[1]);$i++)
{
$js[]
=
hexdec($js_uni[1][$i]);
}
$utf8
=
array_merge($html_uni[1],
$js);
$code
=
$s;
for($j=0;$jcount($utf8);$j++)
{
$code
=
str_replace($source[$j],
unicode2utf8($utf8[$j]),
$code);
}
return
$code;//$s;//preg_replace('/u([0-9a-f]{4})/ie',
chr(hexdec('1')),
$s);
}
function
unicode2utf8($c)
{
$str=;
if
($c
0x80)
{
$str.=chr($c);
}
else
if
($c
0x800)
{
$str.=chr(0xc0
|
$c6);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x10000)
{
$str.=chr(0xe0
|
$c12);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x200000)
{
$str.=chr(0xf0
|
$c18);
$str.=chr(0x80
|
$c12
0x3f);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
return
$str;
}
$str='%u5927%u5BB6%u597D%uFF0C我是孤魂!br
/';
echo
uni_decode($str);
//
大家好,我是孤魂!这是测试文本!
在网上搜索一把,很多用php实现的escape函数,大同小异
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function
phpescape($str){
preg_match_all(/[x80-xff].|[x01-x7f]+/,$str,$newstr);
$ar
=
$newstr[0];
foreach($ar
as
$k=$v){
if(ord($ar[$k])=127){
$tmpString=bin2hex(iconv(GBK,ucs-2,$v));
if
(!eregi(WIN,PHP_OS)){
$tmpString
=
substr($tmpString,2,2).substr($tmpString,0,2);
}
$reString.=%u.$tmpString;
}
else
{
$reString.=
rawurlencode($v);
}
}
return
$reString;
}
以上所述就是本文的全部内容了,希望大家能够喜欢。

⑦ 求个简单的PHP & C++ 字符串加密解密算法

不需要解密的话使用MD5便是了,但是需要解密的话考虑别的,简单的比如BASE64,其他的如RSA,DES什么的

⑧ 请教 php如何对字符串加密和解密,求一个相关的实例!

base64_decode() 解密

base64_encode()加密

<?php
$str='Thisisanencodedstring';
echobase64_encode($str);
?>
阅读全文

与php字符串加解密相关的资料

热点内容
javastring字符位置 浏览:196
银河麒麟字体库存在哪个文件夹 浏览:956
魔兽加丁服务器的航空叫什么 浏览:152
花冠改装案例哪个app多 浏览:515
成绩单app哪个好用 浏览:140
北美程序员vs国内程序员 浏览:181
php解析xml文档 浏览:121
石墨文档APP怎么横屏 浏览:185
墙主钢筋加密和非加密怎么看 浏览:144
金山区文件夹封套定制 浏览:708
soho程序员 浏览:672
java字节截取 浏览:525
php提交作业 浏览:815
房产还没解压可以办理赠予吗 浏览:224
java毫秒转分钟 浏览:753
模式识别中文pdf 浏览:774
c语言平均数字编译错误 浏览:171
单片机算交流 浏览:45
php自适应网站 浏览:467
2b2t服务器怎么获得权限 浏览:816