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

1 篇文章 0 订阅
1 篇文章 0 订阅

原理如下,假如:

加密

明文: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
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值