【发布时间】:2025-12-10 07:40:01
【问题描述】:
以下 Delphi 例程最初来自很久以前的 CompuServe 帖子,用于加密我们数据库中的各种信息。下面是 Delphi 2007 和(感谢一些 SO 对 Unicode 差异的帮助)Delphi XE 版本。
我们一直在尝试将其转换为 C#,并且已经接近了,但我们在某个地方遗漏了一些东西。不幸的是,我们的 Delphi 人(我)不懂 C#,而 C# 人是 Delphi 的新手。 C# 没有(似乎)有 AnsiString 的概念,所以解决方案可能会涉及到 byte 或 char 数组?
我们非常感谢在将其转换为 C# 方面的任何帮助。
Delphi 2007 版 (ASCII)
function EncodeDecode(Str: string): string;
const
Hash: string = '^%12hDVjED1~~#29afdmSD`6ZvUY@hbkDBC3fn7Y7euF|R7934093*7a-|- Q`';
var
I: Integer;
begin
for I := 1 to Length (Str) do
Str[I] := chr (ord (Str[I]) xor not (ord (Hash[I mod Length (Hash) + 1])));
Result := Str;
end;
Delphi XE 版 (Unicode)
function TfrmMain.EncodeDecode(Str: AnsiString): AnsiString;
const
Hash: string = '^%12hDVjED1~~#29afdmSD`6ZvUY@hbkDBC3fn7Y7euF|R7934093*7a-|- Q`';
var
I: Integer;
begin
Result := Str;
for I := 1 to Length (Result) do
Result[I] := AnsiChar (ord (Result[I]) xor not (Ord (Hash[I mod Length (Hash) + 1])));
end;
【问题讨论】:
-
请注意:由于现在您的加密方法包括密钥(这是您的“哈希”字符串)是完全公开的,您应该尽快更改此字符串,否则您的数据在都针对攻击者。但是你可以完全切换到更好的算法。
-
谢谢 Paŭlo - 在发帖之前我弄坏了钥匙。我们的实际密钥大不相同。
标签: c# delphi encryption