今天编了个加密程式--抛砖引玉

Python/PHP/Perl 开发与设计
回复
sqlfm
帖子: 356
注册时间: 2007-02-15 6:26
送出感谢: 0
接收感谢: 1 次

今天编了个加密程式--抛砖引玉

#1

帖子 sqlfm » 2007-07-23 14:19

欢迎加入“健脑俱乐部“--呵呵:em05

<?php
@session_start();
$str = "测试benb 661-1-1-1-1-a dasdkjf asdf asdf akjsdf asdf 1a";
$b62 = @enc65($str,1);
$d62 = @dec65($b62,1);
echo "<pre>str = [$str]<p>b62 = [$b62] ".@strlen($b62)."<p>d62 = [$d62]";

function benkey65($sesIp=0)
{
$b65 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-_";
$b30 = @substr($b65,0,32);
$key = "dkdkdkd wxyz";
if ($sesIp) $key .= $_SERVER['REMOTE_ADDR'].@session_id();
$key = @strtoupper(@md5(@md5($key)));
$key = @str_replace(@array("U","V","W","X","Y","Z"),"0",$key);
for ($i=0;$i<32;$i++){
$cur = @strpos($b30,@substr($key,$i,1))-10;
$arr[] = $cur;
$b65 = @cook65($b65,$i,$cur);
}
$arr[] = $b65;
return $arr;
}
function cook65($b65,$fm,$to)
{
$pos = $fm + $to;
if ($pos < 0 || $pos > 64 || $fm==$pos) return $b65;
if ($fm>$pos) @swap($fm,$pos);
$b65 = @substr($b65,0,$fm).@substr($b65,$pos,1).@substr($b65,$fm+1,$pos-$fm-1).@substr($b65,$fm,1).@substr($b65,$pos+1);
return @substr($b65,$pos).@substr($b65,0,$pos);
}
function swap(&$a,&$b){$c=$a;$a=$b;$b=$c;}
function enc65($str,$sesIp=0)//any str ascii 10-254
{
$key = @benkey65($sesIp);

$len = @strlen($str);
if ($len<32) $str .= @str_repeat(" ",32-$len);

for ($i=0;$i<$len || $i<32;$i++) $res .= @str_pad(@ord(@substr($str,$i,1)) + $key[$i % 32],3,0,STR_PAD_LEFT);

$len = @strlen($res);
if ($len%6>0) $res .= "032";
for ($i=0;$i<$len;$i +=6) $res2 .= @base65(@substr($res,$i,6),$key[32]);
$res2 = @substr($res2,$key[0]).@substr($res2,0,$key[0]);
$res2 = @substr($res2,$key[5]).@substr($res2,0,$key[5]);
$res2 = @substr($res2,$key[9]).@substr($res2,0,$key[9]);
return $res2;

}
function dec65($str,$sesIp=0)
{
$key = @benkey65($sesIp);
$str = @substr($str,0-$key[9]).@substr($str,0,0-$key[9]);
$str = @substr($str,0-$key[5]).@substr($str,0,0-$key[5]);
$str = @substr($str,0-$key[0]).@substr($str,0,0-$key[0]);
$len = @strlen($str);
for ($i=0;$i<$len;$i +=3) $res .= @str_pad(@strpos($key[32],@substr($str,$i,1))*65*65 + @strpos($key[32],@substr($str,$i+1,1))*65 + @strpos($key[32],@substr($str,$i+2,1)),6,0,STR_PAD_LEFT);
if (@substr($res,-3)=="032") $res = @substr($res,0,-3);
$len = @strlen($res)/3;

for ($i=0;$i<$len;$i++) $res2 .= @chr(@substr($res,$i*3,3) - $key[$i % 32]);

return @trim($res2);

}
function base65($int,$b65)
{
$b = $int%(65*65);
return @substr($b65,@floor($int/65/65),1).@substr($b65,@floor($b/65),1).@substr($b65,$b%65,1);
}
?>
2007:琉璃地,旃檀林。心心作。念念是。
our1944
帖子: 14
注册时间: 2006-12-29 14:27
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 our1944 » 2007-07-25 19:54

无敌了~学习。。。
发现自己是多么不重视字符串处理函数。。。
leonardleonard
帖子: 26
注册时间: 2007-08-27 9:11
送出感谢: 0
接收感谢: 0

#3

帖子 leonardleonard » 2007-09-04 22:02

字符串处理的高手阿,望其项背
sqlfm
帖子: 356
注册时间: 2007-02-15 6:26
送出感谢: 0
接收感谢: 1 次

#4

帖子 sqlfm » 2007-09-05 6:46

这个加密程式,被我用在MYSQL SIDU 里了。

若是被您破解了,不要忘了告诉我一声。咱们互相学学。呵呵。
2007:琉璃地,旃檀林。心心作。念念是。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#5

帖子 eexpress » 2007-09-05 6:57

加密,应该用C的unsigned char 数组吧。呵呵。
字符串操作,总会觉得有隐含的问题。

不会php。说想法。
● 鸣学
头像
yiller
帖子: 47
注册时间: 2007-09-28 2:33
来自: 重庆
送出感谢: 0
接收感谢: 0

#6

帖子 yiller » 2007-11-25 3:09

用不着的
何必呢? 你已经用了2次MD5已经足够了
其他东西都没有必要 加密算法越复杂越影响服务效率
sqlfm
帖子: 356
注册时间: 2007-02-15 6:26
送出感谢: 0
接收感谢: 1 次

#7

帖子 sqlfm » 2007-11-25 11:31

md5 表面上看是不能解密的。其实是最容易解密的。

如:password = "ab5ftg3d5de8hg.....";//md5('my very secure password - you do not know it :) ')

你只要用一个 while loop 可能不到10 分钟便可解密。

用2个MD5 可能好一点,但是事先知道你用了2个MD5,用上述的 while loop 解密 ,起结果与 一个MD5 一样脆弱。

因此一个好的密码,不能只是 md5('my5pass') 之类。最好有什么东西,防止 while loop 来解密。

最近看到一则新闻云:一中学生用魔方理论加密。

曼有意思的。这个立方体看起来不容易归位,若用电脑来计算,可能并不难解掉。

但是立方体的位移功能,倒是很有意思。如果加上不确定的转动方案(如:每次转动,根据上一次的结果),可能会设计出一个很好的密码系统。
2007:琉璃地,旃檀林。心心作。念念是。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#8

帖子 BigSnake.NET » 2007-11-25 11:35

sqlfm 写了:md5 表面上看是不能解密的。其实是最容易解密的。

如:password = "ab5ftg3d5de8hg.....";//md5('my very secure password - you do not know it :) ')

你只要用一个 while loop 可能不到10 分钟便可解密。

用2个MD5 可能好一点,但是事先知道你用了2个MD5,用上述的 while loop 解密 ,起结果与 一个MD5 一样脆弱。

因此一个好的密码,不能只是 md5('my5pass') 之类。最好有什么东西,防止 while loop 来解密。

最近看到一则新闻云:一中学生用魔方理论加密。

曼有意思的。这个立方体看起来不容易归位,若用电脑来计算,可能并不难解掉。

但是立方体的位移功能,倒是很有意思。如果加上不确定的转动方案(如:每次转动,根据上一次的结果),可能会设计出一个很好的密码系统。
很怀疑你有没有尝试过
我不信10分钟搞定
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
yiller
帖子: 47
注册时间: 2007-09-28 2:33
来自: 重庆
送出感谢: 0
接收感谢: 0

#9

帖子 yiller » 2007-11-26 11:30

BigSnake.NET 写了:
sqlfm 写了:md5 表面上看是不能解密的。其实是最容易解密的。

如:password = "ab5ftg3d5de8hg.....";//md5('my very secure password - you do not know it :) ')

你只要用一个 while loop 可能不到10 分钟便可解密。

用2个MD5 可能好一点,但是事先知道你用了2个MD5,用上述的 while loop 解密 ,起结果与 一个MD5 一样脆弱。

因此一个好的密码,不能只是 md5('my5pass') 之类。最好有什么东西,防止 while loop 来解密。

最近看到一则新闻云:一中学生用魔方理论加密。

曼有意思的。这个立方体看起来不容易归位,若用电脑来计算,可能并不难解掉。

但是立方体的位移功能,倒是很有意思。如果加上不确定的转动方案(如:每次转动,根据上一次的结果),可能会设计出一个很好的密码系统。
很怀疑你有没有尝试过
我不信10分钟搞定
:D :D
如果LZ有10分钟能解MD5的程序 麻烦发出来共享下
嘎嘎

1次MD5之后就是32位了哟 然后你用循环解32位的MD5
额~~~~这个
头像
stlxv
论坛版主
帖子: 8273
注册时间: 2006-05-03 0:39
来自: المريخ
送出感谢: 0
接收感谢: 1 次

#10

帖子 stlxv » 2007-11-26 11:37

任何有可以得到确定密文的加密方法,都无法应对穷举破解
PHP是最好的语言!不服来战!
回复

回到 “Python/Php/Perl”