gpt4 book ai didi

从delphi 7到xe的字符串编码错误

转载 作者:行者123 更新时间:2023-12-01 18:53:05 25 4
gpt4 key购买 nike

我在互联网上找到了一些加密字符串的来源,我看到在delphi 7上该字符串加密和解密得很好,当我尝试用delphi xe2、xe3、xe4、xe5做同样的事情时,加密结束解密失败出现此错误“解密缓冲区大小无效”

我正在使用此处的 aes.pas 和 eiaes.pas:http://code.google.com/p/jalphi-lib/source/browse/trunk/codemyth/delphi/dontuseit/?r=7

我认为问题在于字符串的编码。

这个问题能解决吗?

最佳答案

您提供的链接的 AES 库尚未更新,无法支持以下事实:Delphi 更高版本(Delphi 2009 及以上)中的“String”现在是 UnicodeString 其中每个字符都是 WideChar

您有 4 个选择:

  1. 联系库作者并询问是否有 Unicode 版本计划/可用

  2. 尝试自己修改库以支持 Unicode(或查找能够/将帮助做到这一点的人)

  3. 查找已支持 Unicode 的替代加密库

  4. 确保您仅在库中使用 ANSI 字符串。

最后一个选项可能对您不可行,但如果可行,您仍然需要修改 AES 库,但不需要进行任何代码更改。

问题在于“String”和“Char”在Delphi的更高版本中是“Wide”类型(每个2个字节) '特点')。这种差异几乎肯定会导致 AES 库中的代码出现问题,该库假定每个字符只有 一个 字节。

您可以通过确保 AES 代码适用于 ANSI 字符串来使这些假设有效。

如果您选择这样做,那么我建议您引入两种新类型:

type
AESString = ANSIString;
AESChar = ANSIChar;
PAESChar = ^AESChar;

然后,您需要检查 AES 库代码,将对“String”的任何引用替换为“AESString”、“Char”与“AESChar”和“PChar”与“PAESChar”。

这将使 AES 成为一个 ANSI 字符串库,并且如果这对您很重要的话,它仍然可以在 Delphi 7(即 Delphi 2009 之前的版本)中使用。

如果您将来发现确实需要完全支持 Unicode 字符串,然后需要正确修复 AES 库代码本身,您可以执行此操作,然后只需更改 AESString 和 < strong>AESChar 输入:

type
AESString = String;
AESChar = Char;

如果随后使用非 Unicode 版本的 Delphi 进行编译,该库将自动恢复为 ANSI String ("String"== ANSIString pre-D2009 ),因此如果您需要同时支持 Unicode 和非 Unicode 版本的 Delphi,您的 Unicode 更改将需要考虑到这一点。你确实需要小心,但这并不难。

关于从delphi 7到xe的字符串编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686191/

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