我有一个做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') )
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是解码它的正确方法。请对不包括替换字符或最后填充
=
字符的任何答案投反对票。在相关问题 更多 >
编程相关推荐