MD5 与 SHA 在 Delphi 中函数实现,加密密码
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"));
}
MD5 与 SHA 在 Delphi 中函数实现,加密密码的更多相关文章
- Delphi 中 函数参数中的 const 修饰符的本质以及注意事项
来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...
- DELPHI中函数、过程变量的声明与应用
Procedure型变量: 在DELPHI中,函数.过程的地址可以赋给一个特殊类型的变量,变量可用如下方式声明: var p : procedure(num:integer); //过程 或: var ...
- Delphi中函数定义和声明的位置
当函数(或过程)A定义在函数(或过程)B之前,那么函数B就可以调用函数A,并且编译成功,例如下面的 procedure TForm1.btn1Click(Sender: TObject); 和 f ...
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...
- 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。
BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法.我们通常只把他们作为加密的基础.单纯的以上 ...
- BASE64、MD5、SHA、HMAC几种加密算法
本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法. BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加 ...
- Java的单向加密算法MD5和SHA——加密和解密
出自:http://www.cnblogs.com/onetwo/p/3875551.html 1.JDK中MD5和SHA加密的主要类 在JDK6.0中,与MD5与SHA密切相关的几个类的类图如下: ...
- JAVA加密技术-----MD5 与SHA 加密
关于JAVA的加密技术有很多很多,这里只介绍加密技术的两种 MD5与 SHA. MD5与SHA是单向加密算法,也就是说加密后不能解密. MD5 ---信息摘要算法,广泛用于加密与解密技术,常用于文件校 ...
- 加密算法中BASE64、MD5、SHA、HMAC等之间的区别
http://blog.csdn.net/lplj717/article/details/51828692 根据项目需要了解了一下几种加密算法(参考其他博客),内容简要介绍BASE64.MD5.SHA ...
随机推荐
- JavaSE_坚持读源码_ClassLoader对象_Java1.7
ClassLoader java.lang public abstract class ClassLoader extends Object //类加载器的责任就是加载类,说了跟没说一样 A clas ...
- linux中文件多行合并为一行的例子
现网中经常遇到匹配到某一关键字下的所有行合并到同一行,再次匹配到相关关键字再和下面的合并,示例如下: # line1ab# line2cde# line3f想要变成: # line1 a b# lin ...
- 解决pycharm问题:module 'pip' has no attribute 'main'
问题 更新pip之后,Pycharm安装package出现如下报错: 解决 找到安装目录下 helpers/packaging_tool.py文件,找到如下代码: 修改为如下,保存即可.
- cors解决跨域
什么是cors CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpReq ...
- 063、如何使用weave网络(2019-04-03 周三)
参考https://www.cnblogs.com/CloudMan6/p/7471162.html weave是Weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多 ...
- html中src与href的区别
概述 src和href之间存在区别,能混淆使用.src用于替换当前元素,href用于在当前文档和引用资源之间确立联系. src src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档 ...
- IIS Express URL Rewrite无效
点击一下项目,再选择属性选项卡(不是右键属性) 如上图,如果托管管道模式是集成的话,改为经典即可.如果在vs2010的 WebDev.WebServer40方式启动 默认就是经典模式
- Java通过cal.get(Calendar.MONTH)比真实月份少一个月
Calendar cal = Calendar.getInstance();假如当前是12月,cal.get(cal.MONTH)是11月.
- 【二】Spring Cloud 入门
官网 版本号: SpringCloud中文网:https://springcloud.cc SpringCloud中文社区:http://springcloud.cn 以下代码就是Maven父子工程, ...
- web 安全知识点
XSS 新手指南:DVWA-1.9全级别教程(完结篇,附实例)之XSS https://www.jianshu.com/p/303206ae2471 https://www.netsparker.co ...