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"));
   }

MD5 与 SHA 在 Delphi 中函数实现,加密密码的更多相关文章

  1. Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

    来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...

  2. DELPHI中函数、过程变量的声明与应用

    Procedure型变量: 在DELPHI中,函数.过程的地址可以赋给一个特殊类型的变量,变量可用如下方式声明: var p : procedure(num:integer); //过程 或: var ...

  3. Delphi中函数定义和声明的位置

    当函数(或过程)A定义在函数(或过程)B之前,那么函数B就可以调用函数A,并且编译成功,例如下面的 procedure TForm1.btn1Click(Sender: TObject); 和   f ...

  4. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA

    1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...

  5. 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。

    BASE64编码算法不算是真正的加密算法.     MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法.我们通常只把他们作为加密的基础.单纯的以上 ...

  6. BASE64、MD5、SHA、HMAC几种加密算法

    本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法.    BASE64编码算法不算是真正的加密算法.    MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加 ...

  7. Java的单向加密算法MD5和SHA——加密和解密

    出自:http://www.cnblogs.com/onetwo/p/3875551.html 1.JDK中MD5和SHA加密的主要类 在JDK6.0中,与MD5与SHA密切相关的几个类的类图如下:  ...

  8. JAVA加密技术-----MD5 与SHA 加密

    关于JAVA的加密技术有很多很多,这里只介绍加密技术的两种 MD5与 SHA. MD5与SHA是单向加密算法,也就是说加密后不能解密. MD5 ---信息摘要算法,广泛用于加密与解密技术,常用于文件校 ...

  9. 加密算法中BASE64、MD5、SHA、HMAC等之间的区别

    http://blog.csdn.net/lplj717/article/details/51828692 根据项目需要了解了一下几种加密算法(参考其他博客),内容简要介绍BASE64.MD5.SHA ...

随机推荐

  1. MySQL语句_积累

    1.GROUP_CONCAT 直接返回拼接好的多个结果,可以供IN()函数使用 语句 结果 +-----------------------------------------+ | GROUP_CO ...

  2. JDK动态代理和CGLIB代理的区别

    一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件 ...

  3. ntp 时间同步

    NTP 是网络时间协议(Network Time Protocol)的简称,通过 udp 123 端口进行网络时钟同步 一.安装 # 既可做服务端也可做客户端 yum install -y ntp # ...

  4. python 内置函数,匿名函数,sorted,filter,map,递归,二分法,冒泡算法 eval

    ############################总结#################################1. lambda 匿名函数 语法——lambda 参数:返回值 __na ...

  5. Mark标记功能的实现(像手工标记的一样)

    今天看到一个网站的标记功能,觉得很不错,先记录一下,emm <!DOCTYPE html> <html lang="en"> <head> &l ...

  6. 在.NET程序中实现HttpServer功能

    亲爱的下午茶   博客园 首页 新随笔 联系 订阅 管理 随笔-6  文章-0  评论-10  在.NET程序中实现HttpServer功能   最近在实现一个可视化数据解析工具,需要在Wpf程序中实 ...

  7. Web前端框架与移动应用开发第八章

    Web前端框架与移动应用开发:制作58招聘专题页 1.html代码: <!DOCTYPE html><html><head> <meta charset=&q ...

  8. jdom使用入门及namespace注意事项【原】

    报文样例 <person:info xmlns:person="http://person/abc" id="1"> <fruit id=&q ...

  9. jenkins笔记

    java -jar jenkins.war -httpPort=9090 以9090端口启动jekins的web应用(内置jetty)

  10. Openresty 学习笔记(二)Nginx Lua 正则表达式相关API

    ngx.re.match 语法: captures, err = ngx.re.match(subject, regex, options?, ctx?, res_table?) 环境: init_w ...