升级到Delphi 2007之后,为什么我的加密不起作用?
发布时间:2020-12-15 09:22:49 所属栏目:大数据 来源:网络整理
导读:我最近从Delphi 2007中获取了一些代码并将其升级到Delphi 2009.这可能与也可能不相关. 但是,当我在计算机上运行代码时,密码的解密不能正确解密.这是代码. Seed := GenerateIntFromString('usercode');// Check if a password already existsif TableUser.Fie
我最近从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 加密密码是:ì??p? 解密的passowrd是: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数据字段中的无效代码点,则可能会出现一些有趣的错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |