将AES加密java转换为Python

2024-09-28 19:00:34 发布

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

我有一个做AES加密的Java代码,我想把它转换成python语言。这是一个主类,我创建了initVector常量,以便更容易查看它是否有效:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.*;
import java.io.BufferedWriter;



public class test {
public static void main(String [] args)
{
    String ss = "pUypiz-7hJ0y_JtpKWaydp";
    String url = "";
    String toBeEncrypted = "";
    String initVector = "IqtY8jgALtjZNLM5";
    String encodedInitVector = Encryptor.encodeB64mod(initVector.getBytes());
    toBeEncrypted = "ch21979714702=put";
    ss = Encryptor.decodeB64Mod(ss);
    url = "i=" + encodedInitVector + "\n&a=" + Encryptor.encrypt(initVector, ss, toBeEncrypted);
    System.out.println(url);
}
}

这是加密程序类:

^{pr2}$

我试图让它在python中运行,但我做错了什么

编辑:

import base64
from Crypto.Cipher import AES
from Crypto import Random
raw ='ch21979714702=put'.encode('utf-8')
key = 'pUypiz-7hJ0y_JtpKWaydp' #should be conveted to hex
iv = b'IqtY8jgALtjZNLM5'
cipher = AES.new( key, AES.MODE_CBC, iv )
print (base64.b64encode( cipher.encrypt( raw ) ).decode('utf-8') )

Tags: importurlstringutiljavapublicssaes
2条回答

Python中的问题是需要使用padding

from Crypto.Util import Padding Padding.pad(raw, 16, style='pkcs7')

https://www.pycryptodome.org/en/latest/src/util/util.html

与Python中的java不同,您需要添加要使用填充的内容。在

您需要base64url解码,这不是一般的base64编码:它将+替换为-,将{}替换为{}。这就是为什么在Java中执行反向替换。在

Here是解码它的正确方法。请对不包括替换字符最后填充=字符的任何答案投反对票。在

相关问题 更多 >