c# - 将 Delphi 代码翻译成 C# (Blowfish)

标签 c# delphi encryption blowfish encryption-symmetric

我不是 Delphi 开发人员,但我必须将此 Delphi 代码转换为 C#:

Function EncodeClave(Clave:String):String;
 var
   R: String;
   FStringFormat:Integer;
 begin
   FStringFormat:=4196;
 with TCipher_Blowfish.Create('CLAVE', nil) do
  try
    Mode := TCipherMode(0);
    R := CodeString(Clave, paEncode, FStringFormat);
    Result := R;
  finally
    Free;
  end;
 end;

我在研究中发现了以下站点:

http://www.bouncycastle.org/csharp/

http://www.schneier.com/code/blowfish.cs

我不明白这行:

FStringFormat:=4196;

为什么有格式的预定义大小?河豚 (DECUtil) 是否有另一个转换?

和模式:

Mode := TCipherMode(0);

Cipher的delphi源码中

(http://www.koders.com/delphi/fidE1F5EC890EF9FD7D5FFEB524898B00BC8403B799.aspx) the parameter 'mode' have the following order : cmCTS, cmCBC, cmCFB, cmOFB, cmECB, cmCTSMAC, cmCBCMAC, cmCFBMAC

所以我想在 delphi 中模式 0 是 cmCTS ...但实际上我不知道。

结果示例:用户:ADMIN pass:ADMIN ---> pass:fAtP3sk=

最佳答案

FStringFormat 变量的值 (4196) 等于使用 DECUtil 中定义的 fmtMIME64 const 这样定义的单位

 fmtMIME64      = $1064;     // MIME Base 64

此值用于格式化传递给 CodeString 方法的字符串。在这种情况下,行

 R := CodeString(Clave, paEncode, FStringFormat);

以 MIME Base 64 格式返回 Clave 变量的值。

现在关于线

模式 := TCipherMode(0);

您正在将 Mode 属性设置为枚举的第一个值。

 TCipherMode = (cmCTS, cmCBC, cmCFB, cmOFB, cmECB, cmCTSMAC, cmCBCMAC, cmCFBMAC);

在这种情况下相当于写。

Mode := cmCTS;

关于c# - 将 Delphi 代码翻译成 C# (Blowfish),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12285933/

相关文章:

windows - 我如何知道是否使用 RawInput 按下了 shift?

非域 Windows 环境中的 C# 编程远程文件夹/文件身份验证

c# - 等待的任务以取消状态结束不会抛出

c# - WPF MVVM在Enter键按下时取消选择文本框

没有证书和 Windows 身份验证的 WCF 消息安全性

bash - 如何将 PKCS12 密码传递到 openssl 转换模块?

javascript - Node.JS 加密解密不起作用

c# - ASP.NET - CSS 到 ImageButton 下的中心标签?

delphi - 我可以使用 Delphi XE2 Subversion 与 Subversion 1.7 的集成吗

c# - 在传递给 native dll 的 C# 回调中访问托管对象