【发布时间】:2021-05-05 22:44:17
【问题描述】:
我已将 Delphi 7.1 应用程序移植到 Delphi 10.3。 我有一些简单的加密/解密功能。 如果我加密字符串值并加密它们,一切都很好:
var
test, encrypted, decrypted : string;
begin
test := 'XXXXXXXX'; // hidden message
encrypted := _common.encrypt(test);
decrypted := _common.decrypt(encrypted );
end;
在这种情况下,一切都按预期工作,即使使用特殊字符,加密后将是:'y'#$0080'vn'
但如果值是string[25],它对特殊字符的处理方式不同:
var
test,decrypted : string;
encrypted : string[25]
begin
test := 'XXXXXXXX'; // hidden message
encrypted := _common.encrypt(test);
decrypted := _common.decrypt(encrypted);
end;
在这种情况下,除非加密字符串包含此示例中的特殊字符,否则一切都会按预期运行 res1 将是:'y?vn'
在向磁盘写入/读取数据时,我在记录中使用 string[]
我该如何解决这个问题?
我可以为记录类型使用不同的字符串类型吗?
/弗莱明
【问题讨论】:
-
加密时应该返回字节,而不是字符串。
-
string[25]是ShortString,但string是UnicodeString,因此您正在调用可能丢失非 ASCII 字符 > $7F 的 Unicode->ANSI 转换,这正是你所看到的正在发生。 -
Delphi and Unicode - 你需要知道的一切。
-
我的问题是我已经用旧的加密存储了我必须读取的数据,所以我必须使用一个字符串数组,但是一个普通的字符串而不是一个短字符串。还有其他方法可以为 255 字节字符设置固定大小的字符串数组吗?
标签: delphi encryption delphi-7 delphi-xe