首页 技术 正文
技术 2022年11月20日
0 收藏 817 点赞 4,136 浏览 2065 个字

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# 资料

参考:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.hmacmd5?view=netframework-4.6

来自   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”));
   }

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,024
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,514
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,362
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,776
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,854