我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

C#.NET与JAVA互通之MD5哈希V2024

来源:网络 更新时间:2024-06-14 09:30:43

C#.NET与JAVA互通之MD5哈希V2024

配套视频:

要点:

1.计算MD5时,SDK自带的计算哈希(ComputeHash)方法,输入输出参数都是byte数组。就涉及到字符串转byte数组转换时,编码选择的问题。

2.输入参数,字符串转byte数组时,编码双方要统一,一般为:UTF-8。

3.输出参数,byte数组转字符串时,编码双方要统一,一般为:16进制字符串(注意大小写);也有人选择BASE64字符串。

4.如果你的MD5用于存储密码,最好要加盐。

5.MD5用于签名,常见的运算过程。

开整:

一、.NET 算MD5

1.常用.NET MD5 代码:

输出效果(小写x):

注意:.ToString("x2") 里面的x是小写,即输出16进制小写。

如果X是大写,则输出16进制大写字符串。代码如下:

输出效果(大写X):

如果不使用.ToString("x2") ,我们还可以使用BitConverter来转换为16进制字符串。

但BitConverter默认转出的字符串是大写并带“-”符号。代码如下:

BitConverter.ToString 默认输出效果:

我们BitConverter.ToString转小写,并不带“-”符号。代码如下:

效果:

二、JAVA MD5

JAVA 算MD5代码:

输出效果:

三、同一个字符串 .NET MD5 与 JAVA 是否一致

双方待哈希字符串都为“HelloWorld”,且转16进制小写。将.NET算得的结果,放到JAVA中进行比较:

效果:

四、MD5加盐

假设你的登录名为:HelloWorld,密码是:123456,密码用MD5 HASH后存储,未加盐,数据库被脱库,对方得到了HelloWorld对应的密码存储MD5值:e10adc3949ba59abbe56e057f20f883e。

对方就可以用撞库,即:计算从 100000 到 999999 之间的MD5 HASH值,每次算出MD5值后,与e10adc3949ba59abbe56e057f20f883e比对,如果相等,则反推出HelloWorld的密码。

代码模拟:

效果:

所谓加盐,就是将原始字符串的头部或尾部加上一段固定的字符串,然后再去算MD5值。大致代码如下:

效果:

不加盐:e10adc3949ba59abbe56e057f20f883e,加盐:6ff7189064eea9523e3814d440ec6adc,明显不一致。

如果你的密码加了盐,对方不仅要脱库,还要知道你的盐是多少,盐是如何拼接的,才能撞库出原密码。

五、常用MD5签名算法

.NET注意:对KEY排序时,无论是Array.Sort,还是SortedDictionary,必须要加 string.CompareOrdinal 参数,不然默认不区分大小写,和JAVA默认区分大小写的行为不一致,导致双方签名不一致。

运算过程:

1.准备一个键值对集合,

2.集合的键按ASCII 从小到大排序,

3.使用&和=拼接,

4.算MD5哈希,注意对方要求的大小写。

.NET代码:

HashUtil 工具类:

.NET效果:

JAVA代码:

JAVA 效果:

--END