AES/CBC/PKCS5Padding在Java和Python中的解密结果不同

问题描述 投票:0回答:0

我需要用python的这种解密方法来解密一个数据文件,因为在GitHub上看到一个用Java做的例子,想用python复现,但是两种编程语言的结果不一样

这是Java代码:

    private static final byte[] key = new byte[]{-24,-106,-102,-46,-91,64,37,-101,-105,-111,-112,-117,-120,-26,-65,3,30,109,33,-107,110,-6,-42,-118,80,-35,85,-42,122,-80,-110,75};
    private static final byte[] iv = new byte[] {42,79,-16,-118,-56,13,99,7,0,87,-59,-107,24,-56,50,83};
    public static byte[] decrypt(byte[] data) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key,"AES"),new IvParameterSpec(iv));
            return cipher.doFinal(data);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

这是 Python 代码:

key = b"\xE8\x96\x9A\xD2\xAB\x40\x25\x9B\x97\x91\x90\x9B\x98\xE6\xBF\x03\x1E\x6D\x21\x95\x6E\xFA\xD6\x8A\x50\xDD\x55\xD6\x7A\xB0\x92\x4B"
iv = b'\x2A\x4F\xF0\x8A\xC8\x0D\x63\x07\x00\x57\xC5\x95\x18\xC8\x32\x53'

def decrypt(data):
  try:
    cipher = AES.new(key,AES.MODE_CBC,iv)
    return cipher.decrypt(data)
  except Exception as e:
    raise RuntimeError(e)

当我将

data
分配给
b'\xd5\x5f\x88\x4a\x40\x1c\xb8\x49\xd4\xe3\xf1\x73\x44\x45\x8c\xe7\xb2\xe3\xb8\xd2\xb1\x06\x84\xb5\xfa\x34\x12\x11\x07\x0f\x91\xbd\xa1\xe5\xe8\x9a\x4c\xde\xa8\x58\x9c\x7f\xd4\x58\xbc\xc4\x90\xe3'
(Python)或将“\”替换为“0”(0xd5 等)(Java)时,我发现它们的结果不同!

Java输出:

-22 -91 -16 38 -125 -30 -66 -24 -52 -72 1 -10 0 8 -125 -76 -45 102 96 126 -103 -124 -103 119 -43 -90 96 -91 119 78 69 -100 -11 -62 -21 -13 80 51 87 43 -77 122 13 -128 59 23 28 -71 -90 -15 35 -54 -64 -16 16 -38 112 -86 -109 -84 43 24 109 12

Python输出:

b'\xc6\xd9\x08\x45\x32\x41\x45\x74\xe7\x32\x69\xb9\x7f\x21\xd6\xdd\x05\x61\x09\xcd\xae\xd6\x00\xb7\x66\x29\xf6\x9b\xd4\xf4\x61\xd5\x54\xad\x13\xaf\x87\xf2\x1c\x45\xa3\x84\xbf\x96\xea\x96\x9b\x95'

我希望Java和python语言解密一样东西。如果需要修改代码,只能修改python代码。

java python-3.x aes
© www.soinside.com 2019 - 2024. All rights reserved.