解密用Java加密的Python字符串

解密用Java加密的Python字符串,java,python,encryption,aes,Java,Python,Encryption,Aes,我正在用Python开发一个服务器应用程序,用Java开发一个连接到它的应用程序。我需要用Java加密字符串,然后用Python解密它 Java代码一切正常,但Python代码有一个问题 from Crypto.Cipher import AES obj = AES.new('0123456789abcdef', AES.MODE_CBC,IV="fedcba9876543210") BLOCK_SIZE = 16 PADDING = " " pad = lam

我正在用Python开发一个服务器应用程序,用Java开发一个连接到它的应用程序。我需要用Java加密字符串,然后用Python解密它

Java代码一切正常,但Python代码有一个问题

from Crypto.Cipher import AES
obj        = AES.new('0123456789abcdef', AES.MODE_CBC,IV="fedcba9876543210")
BLOCK_SIZE = 16
PADDING    = " "
pad        = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
plain      = "password"
plain      = pad (plain)
ciph       = obj.encrypt(plain)
obj        = AES.new('0123456789abcdef', AES.MODE_CBC,IV="fedcba9876543210")
decrypted  = obj.decrypt(ciph)
result     = ""
for char in ciph:
    result += str((hex(ord(char))))[2:]
print result
print decrypted
其结果是:

2af41fc02b33765b56433f59edb67dd3
password
这是我所期望的,并且与Java输出匹配,但是当我在Python代码中插入这两行中的第一行对其进行解密时,输出完全关闭并显示随机字符。我认为这是由于最后的for循环使得它与Java输出相同。有没有办法撤销这个循环?另外,使用至少与此类似的代码是否有一种合适的方法来解密两个输出字符串中的第一个(在Python中)


感谢所有回复,提前感谢

结果中的每对数字都是十六进制字符的字符代码。下面是一个复制转换并将其撤消的代码段(有更优雅的方法可以实现这一点,但它很简单,而且可以正常工作)


在解密之前,您可能需要将十六进制转换回二进制字节字符串。您应该真正使用随机IV。使用常数IV几乎会使IV的用途无效。如果不使用随机IV,则具有相同密码的两个用户将获得相同的加密密码。
import re

ciph = "hello there"
result = ""
for c in ciph:
    result += str((hex(ord(c))))[2:]

# reverse it
orig = ""
for code in re.findall('..', result):
    orig += chr(int(code, 16))
print orig  # "hello there"