簡體   English   中英

在python中實現Laravel加解密函數

[英]Implementing Laravel crypt and decrypt functions in python

通過一些研究,我能夠找到解密 function,現在我正在嘗試使用 python 編寫 laravel 加密 function。

我可以使用它解密:

class decrypter:
    def __init__(cls, key):
        cls.key = key

    def decrypt(cls, text):
        decoded_text = json.loads(base64.b64decode(text))
        iv = base64.b64decode(decoded_text['iv'])

        crypt_object = AES.new(key=cls.key, mode=AES.MODE_CBC, IV=iv)

        decoded = base64.b64decode(decoded_text['value'])
        decrypted = crypt_object.decrypt(decoded)

        return unpad(decrypted, 16).decode('utf-8')


def decrypt_string(str):
    try:
        key = b"xxxx+xxxxxx+x+xxxx+xxxxx"
        key = base64.b64decode(key)
        msg = str
        obj = decrypter(key)
        decrypted = obj.decrypt(msg)
        return decrypted
    except Exception as e:
        logla.logla(e, "decrypt_string")
        print(e)

但是我找不到加密方法的來源。 我可以找到一個來源,但我無法運行它。

在此處輸入鏈接描述

對於加密,按相反的方向進行:

  • 創建 IV
  • 填充明文
  • 保存IV和密文到JSON
  • 用 Base64 編碼 JSON
class encrypter:

    def __init__(cls, key):
        cls.key = key

    def encrypt(cls, text):
        iv = get_random_bytes(16)
        msg = pad(text, 16)
      
        crypt_object = AES.new(key=cls.key, mode=AES.MODE_CBC, IV=iv)
        
        encrypted = crypt_object.encrypt(msg)
        json_string = json.dumps({'iv': base64.b64encode(iv).decode(), 'value': base64.b64encode(encrypted).decode()})
        
        return base64.b64encode(json_string.encode())

def encrypt_string(str):
    try:
        key = b'xxxx+xxxxxx+x+xxxx+xxxxx'
        key = base64.b64decode(key)
        msg = str
        obj = encrypter(key)
        encrypted = obj.encrypt(msg)
        return encrypted
    except Exception as e:
        print(e)

進口聲明:

import json
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

和測試用例:

str = b'This is a test plaintext'
encrypted = encrypt_string(str)
decrypted = decrypt_string(encrypted)
print(encrypted)
print(decrypted)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM