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 ...
随机推荐
- maven_常用命令
清理编译好的文件 mvn clean 编译文件(只是编译主目录文件) mvn compile 编译测试文件(也会编译主文件) mvn test 打包 mvn package 将项目发布到本地仓库 mv ...
- PHP 连接 Memcached 服务
1.需要安装php的Memcached扩展,具体安装步骤不做介绍了. 2.php连接memcached的mem.php 文件 <?php $memcache = new Memcached; $ ...
- C# Selenium学习
https://blog.csdn.net/hjkl950217/article/details/54314760 https://www.cnblogs.com/vaevvaev/p/7041842 ...
- ContentType组件
django提供的一个快速连表操作的组件 适用于:一个字段确定不了唯一: 如:pricepolicy表中,course_id和content_type中对应的课程类型id才能确定唯一: model.p ...
- spring boot 2.0.3+spring cloud (Finchley)3、声明式调用Feign
Feign受Retrofix.JAXRS-2.0和WebSocket影响,采用了声明式API接口的风格,将Java Http客户端绑定到他的内部.Feign的首要目标是将Java Http客户端调用过 ...
- 解决Lost connection to MySQL server during query错误方法
昨天使用Navicat for MySQL导入MySQL数据库的时候,出现了一个严重的错误,Lost connection to MySQL server during query,字面意思就是在查询 ...
- spring整合ActiveMq
spring整合ActiveMq: 1:依赖的jar包: 2:spring-activemq.xml 的配置: 代码: <?xml version="1.0" enco ...
- es6模块化导入导出
模块化指的就是将一个大程序拆分成若干个互相依赖的小文件,然后在用简单的方法拼装起来. 在 ES6 之前,JS没有模块化系统,社区制定了一些模块加载方案 最主要的有 CommonJS(Asynchron ...
- MyBatis SQL语句操作Mysql
本文记录使用Mybatis操作数据库时碰到的一些语句,供以后参考. 一,多条件查询 示意SQL语句:SELECT t_field1, t_field2 FROM table_name WHERE t_ ...
- Android MediaPlayer播放raw资源封装类
import android.content.Context; import android.media.MediaPlayer; import xxxx.R; public class MediaU ...