1

我正在尝试使用 crypto++ 加密 http 请求,并在应用引擎服务器端使用 pycrypto 对其进行解密。使用 Arc4 加密,我可以在 iphone 端成功加密和解密,但是当我尝试在应用程序引擎上解密时,结果是乱码。在客户端加密后的密文与我检查日志时在服务器上收到的文本相同,所以如果它们在视觉上相同,为什么解密会失败?

我想这可能与 NSString 的编码有关,因为我发现我需要在解密之前在服务器端调用 encode(),以避免在尝试用 ascii 编码密码时decrypt() 失败. 我有一个单独的帖子对此进行了深入研究。任何人都可以提供一些建议吗?

带有谷歌应用引擎的crypto++ / pycrypto

更新:我发现使用 Crypto++ 在 C 中加密产生的密文与使用 PyCrypto 在 python 中加密的密文不同。初始化密钥时我做错了什么吗?我做类似的事情:

    ARC4::Encryption enc("a");

在 C 中。在 python 中,我这样做:

testobj=ARC4.new('a')

C 中的 % 编码结果密码与 python 中的不同。我注意到在 C 中,我可以为 keylength 传递第二个参数,我猜它应该是 1 来表示“a”,从而产生与不输入参数时不同的密码。但是,%-encoded 结果仍然与 python 编码不同。

也许我的 init 看起来有什么特别不对劲的地方吗?

4

1 回答 1

0

我发现问题不在于任何一个加密 impl 的初始化,而是错误地试图将加密的密文填充到 NSString 中,该 NSString 不能简单地获取没有特定编码的原始二进制数据。诀窍是将数据编码为 base64 或 base16 以使其可读,然后在解密之前在服务器端使用 unhexlify。

于 2010-05-12T03:32:27.843 回答