zoukankan      html  css  js  c++  java
  • MD5 与 SHA 在 Delphi 中函数实现,加密密码 ---- 补充 C# 中对应

    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 ADataAKeystringstring;

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

       

  • 相关阅读:
    禁止浏览器缩放功能。
    布局
    设置页面大小
    常用英语
    iOS沙盒路径的简单介绍
    关于 pragma使用
    3Dtouch API Peek and Pop
    3Dtouch API Home Screen Quick Actions
    创建一个.framework静态库
    新学期和学生一起尝试使用博客
  • 原文地址:https://www.cnblogs.com/hopesun/p/9656814.html
Copyright © 2011-2022 走看看