一。注意要点

1:输入字符串的的编码双方保持统一,如:UTF8;

2:HASH计算输出结果 byte[] 数组转String 时,编码要统一,如:转16进制小写字符串。当然也可以转Base64。

3:如果是16进制字符串,双方大小写要统一。

二。C#

先看一个常见代码:

public static String Md5Hash(String str)
{
MD5 md = MD5.Create();
byte[] bytes = Encoding.UTF8.GetBytes(str);
byte[] buffer2 = md.ComputeHash(bytes);
string rst = "";
//小写的 x2 是16进制小写。大写 X2 是转16进制大写。
for (int i = 0; i < buffer2.Length; i++)
{
rst = rst + buffer2[i].ToString("x2");
}
return rst;
}

解析:

“MD5 md = MD5.Create();” 获取一个C# MD5对象。

“byte[] bytes = Encoding.UTF8.GetBytes(str);”,将输入字符串用UTF8编码转为byte[] 数组,方便下一步给ComputeHash()方法计算。

“rst = rst + buffer2[i].ToString("x2");”,拿到HASH结果后,逐字节转16进制小写。

调用这个方法:

string strOrg = "中华人民共和国";
Console.WriteLine("md5 hash 16进制小写:"+ Md5Hash(strOrg));

看下结果:

md5 hash 16进制小写:025fceab9418be86066b60a71bc71485

我们也可以将"x2"换成大写的“X2”,这样转出来16进制字符串为大写。

public static String Md5HashUpper(String str)
{
MD5 md = MD5.Create();
byte[] bytes = Encoding.UTF8.GetBytes(str);
byte[] buffer2 = md.ComputeHash(bytes);
string rst = "";
//小写的 x2 是16进制小写。大写 X2 是转16进制大写。
for (int i = 0; i < buffer2.Length; i++)
{
rst = rst + buffer2[i].ToString("X2");
}
return rst;
}

调用:

Console.WriteLine("md5 hash 16进制大写:" + Md5HashUpper(strOrg));

结果 :

md5 hash 16进制大写:025FCEAB9418BE86066B60A71BC71485

还有另一个方法,可把byte[] 转为16进制:BitConverter.ToString().

要注意,BitConverter.ToString(),转出来的16进制字符串,是带减号的“-”,返回最终结果时要去掉-。

public static String Md5HashBitConvert(String str)
{
MD5 md = MD5.Create();
byte[] bytes = Encoding.UTF8.GetBytes(str);
byte[] buffer2 = md.ComputeHash(bytes);
string rst = BitConverter.ToString(buffer2);
Console.WriteLine("BitConverter.ToString()之后原始值:" + rst);
string rst2 = rst.Replace("-", "");
Console.WriteLine("去掉减号‘-’后值:" + rst2);
return rst2;
}

运算结果:

BitConverter.ToString()之后原始值:02-5F-CE-AB-94-18-BE-86-06-6B-60-A7-1B-C7-14-85
去掉减号‘-’后值:025FCEAB9418BE86066B60A71BC71485

三。JAVA

package org.example;

import java.security.MessageDigest;

public class HashUtil {
public static String Md5Hash(String str) throws Exception
{
//默认UTF8
byte[] byStr=str.getBytes();
String rst="";
// MessageDigest instance for MD5
MessageDigest md = MessageDigest.getInstance("MD5");
// Update MessageDigest with input text in bytes
md.update(byStr);
// Get the hashbytes
byte[] hashBytes = md.digest();
// Convert hash bytes to hex format
StringBuilder sc = new StringBuilder();
//小写的 x 是转16进制小写。
for (byte b : hashBytes) {
sc.append(String.format("%02x", b));
}
rst=sc.toString();
return rst;
} public static String Md5HashUpper(String str) throws Exception
{
//默认UTF8
byte[] byStr=str.getBytes();
String rst="";
// MessageDigest instance for MD5
MessageDigest md = MessageDigest.getInstance("MD5");
// Update MessageDigest with input text in bytes
md.update(byStr);
// Get the hashbytes
byte[] hashBytes = md.digest();
// Convert hash bytes to hex format
StringBuilder sc = new StringBuilder();
//小写的 x 是转16进制小写。大写的 X 转为大写。
for (byte b : hashBytes) {
sc.append(String.format("%02X", b));
}
rst=sc.toString();
return rst;
}
}

调用:

public static void main( String[] args )
{
try { String md5HashInput="中华人民共和国";
System.out.println( "MD5 HASH输入:" +md5HashInput); String md5HashOutput=HashUtil.Md5HashUpper(md5HashInput); System.out.println( "MD5 HASH输出:" +md5HashOutput);
}catch (Exception ex)
{
System.out.println( "ex:"+ex.getMessage() );
} System.out.println( "Hello ee!" );
}
}

运算结果:

MD5 HASH输入:中华人民共和国
MD5 HASH输出:025FCEAB9418BE86066B60A71BC71485

没必要为了大小单独写一个方法,直接在 Md5Hash(strOrg) 方法后面加 ToUpper(),这里只是为了方便演示。

Console.WriteLine("md5 hash 16进制大写2 :" + Md5Hash(strOrg).ToUpper());

(编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通的更多相关文章

  1. 如何在C#中生成与PHP一样的MD5 Hash Code

    最近在对一个现有的系统进行C#改造,该系统以前是用PHP做的,后台的管理员登陆用的是MD5加密算法.在PHP中,要对一个字符串进行MD5加密非常简单,一行代码即可: md5("Somethi ...

  2. C# 实现MD5 Hash 计算

    C#提供了一系列的加密库,可以让我们自由使用,这里我来介绍如何使用C#的加密库实现MD5 hash值的计算工作. 参考代码: private static String CalcMd5(String ...

  3. md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样

    md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样

  4. 哈希(Hash)与加密(Encrypt)相关内容

    1.哈希(Hash)与加密(Encrypt)的区别 哈希(Hash)是将目标文本转换成具有相同长度的.不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的.可 ...

  5. Hash哈希(一)

    Hash哈希(一) 哈希是大家比较常见一个词语,在编程中也经常用到,但是大多数人都是知其然而不知其所以然,再加上这几天想写一个一致性哈希算法,突然想想对哈希也不是很清楚,所以,抽点时间总结下Hash知 ...

  6. md5增加指定的加密规则,进行加密

    import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.securit ...

  7. MD5 SHA1 哈希 签名 碰撞 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型

    第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型 Hash操作,redis中Hash在内存中的存储格式如下图: hset(name, key, value)name ...

  9. 上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中

    上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中 前端:要用到一个插件,点击下载 <!DOCTYPE html> <html xmlns=&q ...

随机推荐

  1. HTTPS 如何保证数据传输安全

    引言 为什么把这个作为选题. 大概也是2年前,我的同事,在面试某宇宙大厂遇到的问题与我一起探讨.这个时候我发现,虽然TLS(https)这个东西大部分时候可能不会被直接用到,但很容易被作为考察的目标范 ...

  2. 记一次 .NET 某RFID标签管理系统 CPU 暴涨分析

    一:背景 1. 讲故事 前段时间有位朋友说他的程序 CPU 出现了暴涨现象,由于程序是买来的,所以问题就比较棘手了,那既然找到我,就想办法帮朋友找出来吧,分析下来,问题比较经典,有必要和大家做一下分享 ...

  3. 【每天学一点-03】 使用Html5+Less实现简单的静态登录界面(入门Less)

    1.首先引用Less 有npm安装.cdn引用.或者下载Less.js本地引用,我采用的是第三种方法 less.js引用: 下载地址:https://github.com/less/less.js/t ...

  4. zabbix监控添加学习笔记

    在实际生产环境中,除了CPU.内存等一些系统信息可以挂载zabbix的自带模板Template OS Linux:但是一些公司开发的定制服务需要自己写模板或者监控项去监控: 一.监控公司的java服务 ...

  5. 第四天python3 python解析式-生成器-迭代器

    标准库datetime datetime模块  对日期.时间.时间戳的处理 datetime类 类方法: today() 返回本地时区当前时间的datetime对象: now(tz=None) 返回当 ...

  6. css基础05

    无关浏览器,只想对于原来的位置.而且下面的盒子也不会升上去. 没有父亲的时候就是以浏览器为标准的. 父亲没定位,爷爷有定位,就按照爷爷的,不管父亲了. 绝对定位飘起来比浮动还要高.飘起来了它的位置就会 ...

  7. linux 安装Apache php mysql注意事项

    由于apache的php组件 php.so是由php安装生成的,故需在Apache安装之后才安装php比较合适 libphp5.so是php5提供的,你还需要编译php5才能生成这个文件 你在PHP的 ...

  8. Odoo14 设置Binary字段默认值

    1 # Odoo 中的附件也就是Binary字段都是经过特殊处理的 2 # 首先是上传的时候会进行base64编码后再上传到服务器 3 # 服务器进行压缩存放在odoo文件仓库中 4 # 每个odoo ...

  9. 使用.NET简单实现一个Redis的高性能克隆版(二)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...

  10. 【转载】一封面向社会,关于对近日来 CCF 不当行为之抗议的公开信

    原文链接:https://101001011.github.io/2022/06/11/zhi-ccf-de-yi-feng-gong-kai-xin/ 原文作者:CCA(CCA's Blog) 前天 ...