php代码加密,十大常见密码加密方式
今天给各位分享php代码加密的知识,其中也会对十大常见密码加密方式进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
php源码怎么加密
一、无需任何PHP扩展的加密
此类加密的代表有威盾PHP加密专家、PHP在线加密平台、PHP神盾等。
此类加密都是以eval函数为核心,辅以各式各样的字符串混淆和各种小技巧,来达到加密目的(更准确的说,应该算是混淆)。下面以一个简单的hello world为例来说明此类加密的大体过程。
<?php
echo"hello world";
首先,我们把这段代码变为通过eval执行的
<?php
eval('echo"hello world";');
然后,我们再进行一些转换,比如说base64编码
<?php
eval(base64_decode('ZWNobyAiaGVsbG8gd29ybGQiOw=='));
就这样子,我们的第一个加密过的php代码新鲜出炉了。。。
上面这个例子非常非常简单,基本上任何有一点php语言基础甚至别的语言基础的人都能轻松的看懂并解密。因此,我们需要一些方法让这个加密至少看上去不是那么简单。
二、同时采用多种编码函数
除了刚才提到的base64,php还有许多内置的编码函数,例如urlencode、gzcompress等。把这些函数混合使用可以提高解密的复杂度(不是难度),此外还可以使用strtr来制定自己的编码规则。使用变量来代替函数名使用特定字符来命名变量
这儿所说的特定字符是一些极其相似的字符,如I和1,0和O。试想一下满屏都是O和0组成的变量,并且每一个的名字长度都在10个字符以上。。。判断文件自身是否被修改
这个功能看似容易,对文件做一下摘要再进行下对比即可知道是否被修改了,但是如何才能在文件内把摘要嵌入进去呢?我没有找到完美的方案,但一个变通的方案还是很容易的。。。
<?php
$code= substr(file_get_contents(__FILE__), 0,-32);
$hash= substr(file_get_contents(__FILE__),-32);
if(md5($code)!==$hash){
exit('file edited');
}
ACBC41F727E00F85BEB3440D751BB4E3
当然,你可以把这个校验字符串放在别的位置来提高破解的难度。有了这个,别人想破解你的程序可就得多费一点功夫了。。。
既然知道了原理,那解密自然也就非常简单了,总体来说就三步:
把eval替换为输出,比如echo根据编码规则把字符串还原如果文件未解密完全,从第一步开始继续
当然,实际上的解密过程并没有这么简单,比如说如果加密的时候使用了gzcompress,那得到的数据将会包含一些二进制数据,而采用一般的文本编辑器打开时这些数据都会显示为乱码,并且在保存时丢失部分数据。解决方法很简单也很麻烦,那就是使用二进制(16进制)方式打开、修改和保存。
php加密和解密的代码
php提供的加密函数不只是有MD5,虽然MD5是用得最多的,因为其安全性相对较好。但是现在也有网站通过提供庞大的数据库来对其进行破解(比如www.cmd5.com)。
除了MD5外,php还支持base64加密,这个函数可以进行解密,但是这种方式加密的结果并不是很安全,当然,如果要求不是很高的话,可以使用。进行base64加密的函数是:base64_encode($str);相反,对加密后的结果进行解密的函数是:base64_decode($str)。如:
<?php
$a="admin";
$b=base64_encode($a);
$c=base64_decode($b);
echo"加密前:\$a=",$a,"<br/>";
echo"加密后:\$b=",$b,"<br/>";
echo"解密后:\$c=",$c,"<br/>";
?>
如果对这种方式得到的加密结果不满意,你可以对加密后或者加密前的字符串进行可逆处理(可逆是为了方便解密),然后在进行加密或者相关处理就可以了。
余下的自己搞定吧
急! php写的加密函数如何用java解密
php,jsp,delphi多语言兼容的简单的加密解密算法,jsp目前暂时没有实现中文的加密解密兼容。希望哪路高手能帮忙补上。
1,php的需要对以上代码稍加修改,内容如下:
<?php
$key="admin";
function keyED($txt,$encrypt_key){
$encrypt_key= md5($encrypt_key);
$ctr=0;
$tmp="";
for($i=0;$i<strlen($txt);$i++){
if($ctr==strlen($encrypt_key))$ctr=0;
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
$ctr++;
}
return$tmp;
}
function encrypt($txt,$key){
srand((double)microtime()*1000000);
$encrypt_key= md5(rand(0,32000));
$ctr=0;
$tmp="";
for($i=0;$i<strlen($txt);$i++){
if($ctr==strlen($encrypt_key))$ctr=0;
$bbb=substr($encrypt_key,$ctr,1).
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
$tmp.=$bbb;
$ctr++;
}
return base64_encode(keyED($tmp,$key));
}
function decrypt($txt,$key){
$txt=base64_decode($txt);
$txt= keyED($txt,$key);
$tmp="";
for($i=0;$i<strlen($txt);$i++){
$md5= substr($txt,$i,1);
$i++;
$tmp.=(substr($txt,$i,1) ^$md5);
}
return$tmp;
}
$string="hello world!";
// encrypt$string, and store it in$enc_text
$enc_text= encrypt($string,$key);
// decrypt the encrypted text$enc_text, and store it in$dec_text
$dec_text= decrypt($enc_text,$key);
echo"原字符串:".$string."<br/>";
echo"加密字符串:".$enc_text."<br/>";
echo"解密字符串:".$dec_text."<br/>";
?>
2,jsp代码(java类)
package com.intwork.struct.common;
import java.util.Random;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class KeyED{
public char[] keyED(char[] cText,String encrype_key){
encrype_key=MD5.getInstance(encrype_key).encrypt();
int ctr=0;
char[] cEncrype_key=encrype_key.toCharArray();
char[] temp=new char[cText.length];
int ind=0;
String tmp="";
for(int i=0;i<cText.length;i++){
if(ctr==cEncrype_key.length){
ctr=0;
}
temp[ind++]=(char)(cText[i] ^ cEncrype_key[ctr]);
ctr++;
}
return temp;
}
public String encrype(String text,String key){
String encrype_key=MD5.getInstance(String.valueOf(new Random().nextInt(1000000))).encrypt();
int ctr=0;
char[] cText=text.toCharArray();
char[] cEncrype_key=encrype_key.toCharArray();
char[] temp=new char[cText.length*2];
int ind=0;
String tmp="";
for(int i=0;i<cText.length;i++){
if(ctr==cEncrype_key.length){
ctr=0;
}
temp[ind++]=cEncrype_key[ctr];
temp[ind++]=(char)(cText[i]^cEncrype_key[ctr]);
ctr++;
}
BASE64Encoder b= new sun.misc.BASE64Encoder();
return b.encode(new String(this.keyED(temp,key)).getBytes());
}
public String decrype(String text,String key)throws Exception{
BASE64Decoder decoder= new BASE64Decoder();
text=new String(decoder.decodeBuffer(text));
char[] cText=text.toCharArray();
char[] temp=new char[cText.length/2];
int ind=0;
cText=this.keyED(cText, key);
String tmp="";
for(int i=0;i<cText.length;i++){
char md5=cText[i];
i++;
temp[ind++]=(char)(cText[i]^md5);
}
return new String(temp);
}
}
3,delphi代码(只有加密代码,没写解密代码。有兴趣的可以给补上)
function Tfrmunmsgmain.EnPlugPwcrypt(str, skey: string): string;
//加密插件用的字符串
var
IdEncoder64: TIdEncoderMIME;
sencrypt_key, stemp, stemp1: string;
ictr, i: Integer;
ifirst, ilast: Integer;
function enpwcrypt(str, skey: string): string;
//获取加密后的字符串
var
stemp, sencrypt_key: string;
ictr, i: Integer;
ifirst, ilast: Integer;
begin
try
result:='';
try
sencrypt_key:= LowerCase(UMD5Crypt.UGetMd5Str(skey));
ictr:= 1;
stemp:='';
for I:= 1 to length(str) do
begin
if(ictr= length(sencrypt_key)) then
ictr:= 1;
ifirst:= Ord(midstr(str,i,1)[1]);
ilast:= Ord(midstr(sencrypt_key,ictr,1)[1]);
stemp:= stemp+
chr((ifirst) XOR(ilast));
inc(ictr);
end;
result:= stemp;
except
end;
except
end;
//
end;
begin
try
result:='';
try
IdEncoder64:= TIdEncoderMIME.Create(Application);
sencrypt_key:= LowerCase(UMD5Crypt.UGetMd5Str(inttostr((Random(100000)))));
ictr:= 1;
stemp:='';
stemp1:='';
for I:= 1 to length(str) do
begin
if(ictr= length(sencrypt_key)) then
ictr:= 1;
ifirst:= Ord(midstr(str,i,1)[1]);
ilast:= Ord(midstr(sencrypt_key,ictr,1)[1]);
stemp1:= midstr(sencrypt_key,ictr,1)+
chr((ifirst) XOR(ilast));
stemp:= stemp+ stemp1;
inc(ictr);
end;
result:= IdEncoder64.Encode(enpwcrypt(stemp, skey))
finally
freeandnil(IdEncoder64);
end;
except
end;
end;
php代码加密和十大常见密码加密方式的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!