我不是 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/