MD5 与 SHA 在 Delphi 中函数实现。
为了加密密码,必须使用一种算法,查询资料,比较好的方法是使用:MD5等算法,参考:Delphi XE8 支持MD5
第一种方式是:引用 System.Hash 中的 THashMD5, (或者 THashSHA1,THashSHA2) 参考 官方文档。
http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Hash
简单用法: hashmd5 := THashMD5.Create.GetHashString('abc'); ‘abc’ 是你想加密的字符串,你提供。
使用它计算的结果中,字符是小写。MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
另一种加密是: hashsha1 := THashSHA1.Create.GetHashString('abc');
======================
加“盐”加密: THashMD5.Create.GetHMAC('abc','salt');
可以将用户名作为 salt,对密码进行MD5加密,或者THashSHA1,THashSHA2加密。
THashSHA1/2.Create.GetHMAC(const AData, AKey: string) : string;
http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Hash.THashMD5.GetHMAC
第二种方式是:使用 IdHashMessageDigest ,产生的加密字符是:大写格式!
比如:加密 ‘abc ’ MD5 ("abc") = 900150983CD24FB0D6963F7D28E17F72
在单元中,引入Uses IdHashMessageDigest,(也可以包括:,IdHash,IdGlobal, 不知道原因 !)
代码如下:
Uses IdHashMessageDigest;
function MD5Encode(const str:string):String; //定义一个公开函数
function MD5Encode(const str:string):String;
var
//引用 IdHashMessageDigest,IdHash,IdGlobal 空间
AMD5Encode:TIdHashMessageDigest5;
begin
AMD5Encode:=TIdHashMessageDigest5.Create; //创建实例
try
Result := AMD5Encode.HashStringAsHex(str); //这是实现!
finally
AMD5Encode.Free;
end;
end;
============================================================
由于代码迁移到 Net 框架,需要相应 的C# 的代码实现,继续补充相应资料。
寻求:delphi 中 System.Hash 中的 THashMD5, (或者 THashSHA1,THashSHA2)的C# 资料
来自 System.Security.Cryptography
程序集: System.Security.Cryptography.Algorithms.dll, mscorlib.dll, netstandard.dll
如下代码产生相同的 Hash结果:
using System.Security.Cryptography; //增加引用
string logUser; // 代码登录的用户名称
//HMACMD5(Byte[]) 初始化时,采用了用户的名称 public HMACMD5 (byte[] key) 定义;
HMACMD5 provider = new HMACMD5(Encoding.UTF8.GetBytes(loguser));
// 加密用户的录入的密码 LogPass
byte[] hashedPassword = provider.ComputeHash(Encoding.UTF8.GetBytes(LogPass));
//将字节数组转换成 字符串,“X2” 是大写,可以使用 “x2” 转成小写 。
StringBuilder displayString = new StringBuilder();
for (int i = 0; i < hashedPassword.Length; i++)
{
displayString.Append(hashedPassword[i].ToString("X2"));
}