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

原理如下,假如: 

1. 加密 

明文:1010 1001 
密匙:1110 0011 
密文:0100 1010 
得出密文0100 1010,解密之需和密匙异或下就可以了 

2. 解密 

密文: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]  

 

原文:PHP,Python互通的加密解密函数

 

 

参考推荐

php 加密算法md5, sha1

PHP 对称加密AES算法

PHP 更安全的加密机制 Bcrypt

Python 常用加密算法 base64, md5, sha1

Python中Base64编码和解码

AES、DES、RSA三种典型加密算法

AES 加密算法的详细介绍与实现

PHP 使用cookie实现记住登录状态

PHP Session与Cookie详解

公钥,私钥,数字签名的通俗理解