PHP函数到Python的转换

2024-05-14 19:34:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想知道是否可以将PHP加密函数转换成Python?我正在使用PHP函数加密USER ID,并将其存储在Database中,现在我需要在Python中解密{},我使用这个PHP函数:

function decrypt($id) {
       $cryptKey  = '123';
       $decoded    = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ),         base64_decode( $id ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
       return( $decoded );
    }

Tags: 函数idfunctiondatabasemd5phpdecodeddecrypt
1条回答
网友
1楼 · 发布于 2024-05-14 19:34:26

这是您的函数“翻译”为python

from Crypto.Cipher import AES
from hashlib import md5

def decrypt(id): 
    cryptKey  = '123'
    cipher = AES.new(key=md5(cryptKey).hexdigest(), mode=AES.MODE_CBC, IV=md5(md5(cryptKey).hexdigest()).hexdigest()[:16])
    decoded = cipher.decrypt(id.decode('base64')).rstrip('\0')
    return decoded

五点建议
1使用随机静脉注射
2使用更复杂的键
三。不要硬编码钥匙
4使用openssl_decryptmcrypt_decrypt已弃用

注意
这不适用于MCRYPT_RIJNDAEL_256,因为它使用32字节块。
但您可以使用MCRYPT_RIJNDAEL_128或{}

下面是一个在PHP中使用openssl AES CBC的示例:

^{pr2}$

Python代码:

from Crypto.Cipher import AES
from Crypto import Random
import base64

def encrypt(data, key): 
    pkcs7pad = lambda data: data + chr(16-(len(data)%16)).encode() * (16-(len(data)%16))
    iv = Random.new().read(16)
    cipher = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
    encoded = base64.b64encode(iv + cipher.encrypt(pkcs7pad(data)))
    return encoded

def decrypt(data, key): 
    pkcs7unpad = lambda data: data[:-ord(data[-1:])]
    cipher = AES.new(key=key, mode=AES.MODE_CBC, IV=base64.b64decode(data)[:16])
    decoded = cipher.decrypt(base64.b64decode(data)[16:])
    return pkcs7unpad(decoded)

使用上述函数,您可以在PHP中加密-在python中解密,反之亦然
假设密钥的大小有效(16、24或32字节)

相关问题 更多 >

    热门问题