gpt4 book ai didi

delphi - 为什么升级到 Delphi 2007 之后我的加密不起作用?

转载 作者:行者123 更新时间:2023-12-03 15:22:33 25 4
gpt4 key购买 nike

我最近从 Delphi 2007 中获取了一些代码并将其升级到 Delphi 2009。这可能相关,也可能不相关。

但是当我在计算机上运行代码时,密码解密无法正确解密。这是代码。

Seed := GenerateIntFromString('usercode');

// Check if a password already exists
if TableUser.FieldByName('PASSWORD').AsString <> '' then
begin
EncodedPassword := TableUser.FieldByName('PASSWORD').AsString;
DecodedPassword := EncryptDecrypt(EncodedPassword, Seed);
//etc.. And the function

function TLogonForm.EncryptDecrypt(Input: string; Seed: integer) : string;
var
i : integer;
Output : string;
begin
RANDSEED := Seed;
Output := '';
for i := 1 to Length(Input) do
Output := Output + Chr(Ord(Input[i]) XOR (RANDOM(254) + 1));
Result := Output;
end;

如果我的用户代码是 TD我的密码是“JOEJOE”

加密后的密码是:ì?p?

解密后的密码为:JìEJùE

显然它应该解密为 JOEJOE。更重要的是,如果我构建代码并将 exe 发送给另一个用户,它可以很好地解密。这让我相信这不是代码有问题,而是我的计算机出现了异常。可能是什么?

<小时/>

您可以忽略它,因为它可能不相关。我之所以提到它,是因为这是另一种情况,某些东西在一台计算机上运行良好,但在另一台计算机上运行不佳。

但也有一种情况,当尝试设置过滤器时

TableUser2.Filter := FilterString;

它对我来说工作正常,但其他用户收到错误。

TableUser2:错误 3106:在记录过滤器表达式中发现不支持的运算符。

即使我们通过运行相同代码的相同名称进行过滤。也许是数据库问题?

最佳答案

尝试像这样从 Ansi 移植到 Unicode:

function TLogonForm.EncryptDecrypt(Input: AnsiString; Seed: integer) : AnsiString;
var
i : integer;
Output : AnsiString;
begin
RANDSEED := Seed;
Output := '';
for i := 1 to Length(Input) do
Output := Output + AnsiChar(Ord(Input[i]) XOR (RANDOM(254) + 1));
Result := Output;
end;

我最大胆的猜测是,由于 AnsiChar 和 UnicodeChar 之间的差异,预期结果有所不同。如果您设法生成一些无法存储在数据库的非 unicode 数据字段中的无效代码点,则可能会遇到一些有趣的错误。

关于delphi - 为什么升级到 Delphi 2007 之后我的加密不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507785/

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