使用 Python3 解密已加密的数据

Decrypting data with Python3 that was already encrypted

我有一些在 Java 中使用 AES 加密的数据。我现在想在 Python 中解密。 此处供参考的是解密 Java 代码:

public static String decryptAES(String input, String key)  throws EncryptionException {

    String clearText = null;
    byte[] keyBytes = key.getBytes();
    SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");

    try {
        Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
        cipher.init(1, keySpec);
        // We need to revert our plus sign replacements from above
        input = input.replaceAll(Pattern.quote("_"), "+");
        byte[] decodedInput = Base64.decodeBase64(input.getBytes());
        byte[] clearTextBytes = cipher.doFinal(decodedInput);
        clearText = new String(clearTextBytes);
        clearText = StringUtils.strip(clearText, "{");
    } catch (Exception ex) {
        throw new EncryptionException(ex);
    } 

    return clearText;

}

这是我的

from Crypto.Cipher import AES

encryptionKey = "]zOW=Rf*4*5F^R+?frd)G3#J%tH#qt_#"
encryptedData = "Hx8mA8afdgsngdfCgfdg1PHZsdfhIshfgdesd4rfgdk="

cipher = AES.new(encryptionKey.encode(), AES.MODE_ECB)

plain = cipher.decrypt(encryptedData.encode())

print(plain)

但我收到“ValueError:在 ECB 模式下数据必须与块边界对齐” 我做了 google 并确实找到了一些建议,例如 ValueError: Data must be aligned to block boundary in ECB mode 但我无法真正让它发挥作用。不知道块大小应该是多少

按照@kelalaka 的建议使用 Base64 解码解决了值错误的问题,但输出似乎只是随机字节:

import base64

from Crypto.Cipher import AES

encryptionKey = "]zOW=Rf*4*5F^R+?frd)G3#J%tH#qt_#"
encryptedData = "Hx8mA8afdgsngdfCgfdg1PHZsdfhIshfgdesd4rfgdk="

data = base64.b64decode(encryptedData)

cipher = AES.new(encryptionKey.encode(), AES.MODE_ECB)

plain = cipher.decrypt(data)

print(plain)

输出: b'\xcfh(\xb5\xec%(*^\xd4\xd3:\xde\xfb\xd9R<B\x8a\xb2+=\xbf\xc2%\xb0\x14h\x10\x14\xd3\xbb'