gpt4 book ai didi

java - 用 Python 解密用 Java 加密的字符串

转载 作者:行者123 更新时间:2023-11-30 11:39:31 27 4
gpt4 key购买 nike

我正在开发一个用 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 输出相匹配,但是当我插入 2 行中的第一行以在 Python 代码中对其进行解密时,输出完全关闭并显示随机字符。我认为这是由于末尾的 for 循环导致它与 Java 输出相同。有没有办法撤消 for 循环?还使用至少类似于此的代码是否有一种合适的方法来解密两个输出字符串中的第一个(在 Python 中)?

感谢所有的回复,提前致谢!

最佳答案

result中的每一对数字都是一个char的十六进制字符编码。这是一个重现转换并撤消它的片段(有更优雅的方法可以做到这一点,但它很简单并且有效)。

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"

关于java - 用 Python 解密用 Java 加密的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13223772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com