一。注意要点

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{//默认UTF8byte[] byStr=str.getBytes();String rst="";// MessageDigest instance for MD5MessageDigest md = MessageDigest.getInstance("MD5");// Update MessageDigest with input text in bytesmd.update(byStr);// Get the hashbytesbyte[] hashBytes = md.digest();// Convert hash bytes to hex formatStringBuilder 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{//默认UTF8byte[] byStr=str.getBytes();String rst="";// MessageDigest instance for MD5MessageDigest md = MessageDigest.getInstance("MD5");// Update MessageDigest with input text in bytesmd.update(byStr);// Get the hashbytesbyte[] hashBytes = md.digest();// Convert hash bytes to hex formatStringBuilder 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. python爬虫进阶案例_Python爬虫进阶必备 | MD5 hash 案例解析讲解

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:努力在北京混出人样 ( 想要学习Python?Pyth ...

  2. Python爬虫进阶必备 | 关于MD5 Hash 的案例分析与总结

    今日目标站 aHR0cHM6Ly9tLndjYmNoaW5hLmNvbS9sb2dpbi9vdGhlci1sb2dpbi5odG1s 分析请求 老规矩先抓包分析请求[图1-1]: 图1-1 可以看到提 ...

  3. MD5 hash碰撞实现解密

    目录 1.前言 2.MD5 hash单个碰撞解密 3.MD5 hash批量碰撞解密 1.前言 在日常渗透中,获取到后台密码往往是加密的,常见的就是MD5加密,常见的做法我们会使用在线网站去解密,常用的 ...

  4. hash哈希算法,MD5、SHA1、SHA512、SHA256

    hash算法可以将任意长度的二进制值(明文)映射为较短的固定长度的二进制值(hash值),hash值又称为数字指纹.数字摘要 func StudyHASH(str string, hashType s ...

  5. Hash+哈希表+HashMap+HashSet

    Hash+哈希表+HashMap+HashSet 哈希算法,是一类「算法」. 哈希表(Hash Table),是一种「数据结构」. 哈希函数,是支撑哈希表的一类「函数」. Map是映射/地图的意思,在 ...

  6. MD5是用来加密的吗?BCrypt又是什么呢

    文章目录 前言 MD5的八卦 BCrypt加密 自己加盐 工作负载 使用方便 总结 前言 最近经常看到一种关于 MD5 的说法,比如某某系统的登录模块使用了 MD5 加密算法,保证了用户密码的安全.那 ...

  7. Hash+哈希+哈希函数

    Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数.哈希函数是一个 ...

  8. shiro认证+授权(使用MD5+salt+散列加密)

    通过上文自定义realm分析源码可得https://blog.csdn.net/Kevinnsm/article/details/11183124 用户认证在doGetAuthenticationIn ...

  9. MD5 SHA1 哈希 签名 碰撞 MD

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

最新文章

  1. 2022-2028年中国二次供水设备行业研究及前瞻分析报告
  2. 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍...
  3. MAC下 Apache服务器配置
  4. thingsboard官网单机并发量
  5. leetcode(977)有序数组的平方
  6. 计算收益复利的小例子
  7. mysql 禁止存储过程_为什么阿里巴巴禁止使用存储过程?
  8. Eclipse 模板使用
  9. android x5 webview 第一次,android:X5WebView 首次初始化 X5 内核耗时, 会产生卡顿现象的解决办法...
  10. 禁用驱动程序强制签名(终极办法)
  11. 攻击性Web测试框架(OWTF)是OWASP + PTES的重点,旨在联合优秀的工具使渗透测试更加高效,主要由Python编写
  12. 【华为HCIE考试卷在哪买?】
  13. winRAR去广告版
  14. Excel如何冻结多行多列
  15. 51物联卡:物联卡支持5G吗?怎么购买5G物联卡
  16. 如何在被保护的工作表(Worksheet)中使用Group Outlining
  17. [好文推荐] 给年轻程序员的8条建议
  18. Linux安装配置Tomcat 8.5.34 快捷启动,关闭(二)
  19. 网站中木马病毒了怎么办
  20. 负载均衡性能参数如何测评?

热门文章

  1. 跳动的心html5,施华洛世奇跳动的心真假怎么分辨
  2. 网页(手机wap)如何让广告点击后不再显示?您该这样写代码
  3. Android 实现三种响铃模式的切换
  4. 【HDOJ】4355 Party All the Time
  5. 别笑话爬虫工程师了,数仓库工程师也被警察传话了。
  6. 测试之道——阿里巴巴八年测试专家倾情奉献
  7. Greedy:Cleaning Shifts(POJ 2376)
  8. 【亡羊补牢】JS灵魂之问 第23期 修炼内功 关于闭包的回顾
  9. OpenGL-图元装配
  10. 【bzoj1502】 NOI2005—月下柠檬树