MaDragon 发表于 2022-12-25 15:57

js转python

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

Guo-Guo 发表于 2022-12-25 16:24
可以用chatGPT试一试

国内限制了,一小时一条

MaDragon 发表于 2022-12-25 16:33

Guo-Guo 发表于 2022-12-25 16:24
可以用chatGPT试一试

我试了,给我返回错误

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

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
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 ...

好的谢谢
页: [1]
查看完整版本: js转python