吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1283|回复: 9
收起左侧

[已解决] js转python

[复制链接]
MaDragon 发表于 2022-12-25 15:57
encrypt=function(t, r) {
    t instanceof Object && (t = JSON.stringify(t));
    var p = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(t), CryptoJS.enc.Utf8.parse(r), {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return p.toString();
}有无大佬帮忙把这段js代码转成python啊

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Guo-Guo 发表于 2022-12-25 16:24
可以用chatGPT试一试
时光书窝 发表于 2022-12-25 16:29
 楼主| MaDragon 发表于 2022-12-25 16:33
Guo-Guo 发表于 2022-12-25 16:49
本帖最后由 Guo-Guo 于 2022-12-25 16:52 编辑

def encrypt(t, r):
    if isinstance(t, object):
        t = JSON.stringify(t)
        p = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(t), CryptoJS.enc.Utf8.parse(r), { 'mode': CryptoJS.mode.ECB, 'padding': CryptoJS.pad.Pkcs7
    })
    return p.toString()
github copilot的回答,对不对我就不知道了,对python语法不熟,可以让大佬给你写一段
dreamer2012 发表于 2022-12-25 16:58
ChatGPT的回复:
你可以使用 pycryptodome 库来在 Python 中进行加密解密操作。
首先,你需要安装 pycryptodome 库:
pip install pycryptodome
然后,你可以使用下面的代码来转换上述 JavaScript 代码:
from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import pad

def encrypt(t, r):
    if isinstance(t, dict) or isinstance(t, list):
        t = json.dumps(t)
    t = t.encode('utf-8')
    r = r.encode('utf-8')
    cipher = AES.new(r, AES.MODE_ECB)
    ct_bytes = cipher.encrypt(pad(t, AES.block_size))
    return ct_bytes.hex()
在这段代码中,我们使用了 pycryptodome 库中的 Cipher 模块来加密数据,并使用 Util 模块中的 Padding 函数来填充数据,以便加密后的数据长度是 16 的倍数。
希望这能帮到你!
kof21411 发表于 2022-12-25 17:38
[Asm] 纯文本查看 复制代码
import base64 
from Crypto.Cipher import AES 
import binascii   



class PrpCrypt(object):
    def __init__(self,password):
        self.password = add_to_16(password)

    def add_to_16(self,text):     
        while len(text) % 16 != 0:         
            text += '\0'     
        return text

    def encrypt(self,data):
        password = self.password     
        if isinstance(password, str):         
            password = password.encode('utf8')      
        bs = AES.block_size     
        pad = lambda s: s + (bs - len(s.encode('utf-8')) % bs) * chr(bs - len(s.encode('utf-8')) % bs)     
        cipher = AES.new(password, AES.MODE_ECB)     
        data = cipher.encrypt(pad(data).encode('utf8'))     
        # encrypt_data = binascii.b2a_hex(data)  # 输出hex     
        encrypt_data = base64.b64encode(data)  # 取消注释,输出Base64格式     
        return encrypt_data.decode('utf8')   

    def decrypt(self,decrData):  # 解密
        password = self.password   
        if isinstance(password, str):         
            password = password.encode('utf8')      
        cipher = AES.new(password, AES.MODE_ECB)     
        # plain_text = cipher.decrypt(binascii.a2b_hex(decrData)) # 解密hex
        plain_text = cipher.decrypt(base64.decodebytes(decrData.encode("utf8")))  # 解密base64格式
        return plain_text.decode('utf8').rstrip('\0')  

def add_to_16(text):     
    while len(text) % 16 != 0:         
        text += '\0'     
    return text   

def encrypt(data, password):     
    if isinstance(password, str):         
        password = password.encode('utf8')      
    bs = AES.block_size     
    pad = lambda s: s + (bs - len(s.encode('utf-8')) % bs) * chr(bs - len(s.encode('utf-8')) % bs)     
    cipher = AES.new(password, AES.MODE_ECB)     
    data = cipher.encrypt(pad(data).encode('utf8'))     
    # encrypt_data = binascii.b2a_hex(data)  # 输出hex     
    encrypt_data = base64.b64encode(data)  # 取消注释,输出Base64格式     
    return encrypt_data.decode('utf8')   

def decrypt(decrData, password):     
    if isinstance(password, str):         
        password = password.encode('utf8')      
    cipher = AES.new(password, AES.MODE_ECB)     
    # plain_text = cipher.decrypt(binascii.a2b_hex(decrData)) # 解密hex
    plain_text = cipher.decrypt(base64.decodebytes(decrData.encode("utf8")))  # 解密base64格式
    return plain_text.decode('utf8').rstrip('\0')    


if __name__ == '__main__':     
    data = '123456asd'      # 待加密数据     
    # data = '中文测试!'      # 待加密数据     
    password = '8NONwyJtHesysWpM'  # 16,24,32位长的密码(**)     
    # password = 'iiiioooojjjjpppp'  # 16,24,32位长的密码(**)     
    # password = add_to_16(password)     
    # encrypt_data = encrypt(data, password)     
    # print('加密前数据:{}\n======================='.format(data))     
    # print('加密后的数据:', encrypt_data)      
 楼主| MaDragon 发表于 2022-12-25 18:08
本帖最后由 MaDragon 于 2022-12-25 18:09 编辑
kof21411 发表于 2022-12-25 17:38
[mw_shl_code=asm,true]import base64
from Crypto.Cipher import AES
import binascii   

def encrypt(t ,r):
    # 补足16位
    t = str.encode(t)
    t = pad(t, AES.block_size)  # 将明文对齐
    # 生成加密对象
    aes = AES.new(r, AES.MODE_ECB)
    # 加密
    encrypted = aes.encrypt(t)
    # 转成base64
    encrypted = str(base64.b64encode(encrypted), encoding='utf-8')
    return encrypted
我写好了,还是谢谢你
ok667 发表于 2022-12-25 23:46
ChatGPT的回复:
你可以使用 pycryptodome 库来在 Python 中进行加密解密操作。
首先,你需要安装 pycryptodome 库:
pip install pycryptodome
然后,你可以使用下面的代码来转换上述 JavaScript 代码:
from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import pad

def encrypt(t, r):
    if isinstance(t, dict) or isinstance(t, list):
        t = json.dumps(t)
    t = t.encode('utf-8')
    r = r.encode('utf-8')
    cipher = AES.new(r, AES.MODE_ECB)
    ct_bytes = cipher.encrypt(pad(t, AES.block_size))
    return ct_bytes.hex()
在这段代码中,我们使用了 pycryptodome 库中的 Cipher 模块来加密数据,并使用 Util 模块中的 Padding 函数来填充数据,以便加密后的数据长度是 16 的倍数。
希望这能帮到你!
 楼主| MaDragon 发表于 2022-12-27 14:59
ok667 发表于 2022-12-25 23:46
ChatGPT的回复:
你可以使用 pycryptodome 库来在 Python 中进行加密解密操作。
首先,你需要安装 pycryp ...

好的谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表