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啊 可以用chatGPT试一试 Guo-Guo 发表于 2022-12-25 16:24
可以用chatGPT试一试
国内限制了,一小时一条 Guo-Guo 发表于 2022-12-25 16:24
可以用chatGPT试一试
我试了,给我返回错误 本帖最后由 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语法不熟,可以让大佬给你写一段 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 的倍数。
希望这能帮到你! 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: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
我写好了,还是谢谢你 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 的倍数。
希望这能帮到你! ok667 发表于 2022-12-25 23:46
ChatGPT的回复:
你可以使用 pycryptodome 库来在 Python 中进行加密解密操作。
首先,你需要安装 pycryp ...
好的谢谢
页:
[1]