您的位置:首页 > 编程语言 > Python开发

PHP,Python互通的加密解密函数

2011-11-13 11:39 483 查看
原理如下,假如:

加密

明文:1010 1001

密匙:1110 0011

密文:0100 1010

得出密文0100 1010,解密之需和密匙异或下就可以了

解密

密文:0100 1010

密匙:1110 0011

明文:1010 1001

并没有什么高深的算法,密匙重要性很高,所以,关键在于怎么生成密匙。

PHP版本

function tcodes($string, $isEncrypt = true, $key = 'xiaot.net')
{

$dynKey = $isEncrypt ? hash('sha1', microtime(true)) : substr($string, 0, 40);
$dynKey1 = substr($dynKey, 0, 20);
$dynKey2 = substr($dynKey, 20);

$fixKey = hash('sha1', $key);
$fixKey1 = substr($fixKey, 0, 20);
$fixKey2 = substr($fixKey, 20);

$newkey = hash('sha1', $dynKey1 . $fixKey1 . $dynKey2 . $fixKey2);

if($isEncrypt){
$newstring = $fixKey1 . $string . $dynKey2;
}else{
$newstring = base64_decode(substr($string, 40));
}

$re = '';
$len = strlen($newstring);
for ($i = 0; $i < $len; $i++)
{
$j = $i % 40;
$re .= chr(ord($newstring{$i}) ^ ord($newkey{$j}));
}

return $isEncrypt ? $dynKey . str_replace('=', '_', base64_encode($re)) : substr($re, 20, -20);
}


Python版本

import base64
import hashlib
import time
def tcodes(strs,isEncrypt=1,key='xiaot.net'):
now_time = time.time()
dynKey   = hashlib.new("sha1",str(now_time)).hexdigest() if isEncrypt == 1 else strs[0:40]
dykey1= dynKey[0:20]
dykey2= dynKey[20:]

fixKey = hashlib.new("sha1",key).hexdigest()
fixkey1 = fixKey[0:20]
fixkey2 = fixKey[20:]
newkey = hashlib.new("sha1",dykey1+fixkey1+dykey2+fixkey2).hexdigest()

if(isEncrypt == 1):
newstring = fixkey1 + strs + dykey2
else:
newstring = base64.b64decode(strs[40:].replace('_', '='))

re=''
strlen= len(newstring)

for i in range(0,strlen):
j=i%40
re +=chr(ord(newstring[i])^ord(newkey[j]))

return dynKey + base64.b64encode(re).replace('=','_') if isEncrypt == 1 else re[20:-20]


 

原文来自 小田的博客 http://www.xiaot.net/post/PHP-PythonHuTongDeJiaMiJieMiHanShu.html
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息