(编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
一。注意要点
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 互通相关推荐
- python爬虫进阶案例_Python爬虫进阶必备 | MD5 hash 案例解析讲解
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:努力在北京混出人样 ( 想要学习Python?Pyth ...
- Python爬虫进阶必备 | 关于MD5 Hash 的案例分析与总结
今日目标站 aHR0cHM6Ly9tLndjYmNoaW5hLmNvbS9sb2dpbi9vdGhlci1sb2dpbi5odG1s 分析请求 老规矩先抓包分析请求[图1-1]: 图1-1 可以看到提 ...
- MD5 hash碰撞实现解密
目录 1.前言 2.MD5 hash单个碰撞解密 3.MD5 hash批量碰撞解密 1.前言 在日常渗透中,获取到后台密码往往是加密的,常见的就是MD5加密,常见的做法我们会使用在线网站去解密,常用的 ...
- hash哈希算法,MD5、SHA1、SHA512、SHA256
hash算法可以将任意长度的二进制值(明文)映射为较短的固定长度的二进制值(hash值),hash值又称为数字指纹.数字摘要 func StudyHASH(str string, hashType s ...
- Hash+哈希表+HashMap+HashSet
Hash+哈希表+HashMap+HashSet 哈希算法,是一类「算法」. 哈希表(Hash Table),是一种「数据结构」. 哈希函数,是支撑哈希表的一类「函数」. Map是映射/地图的意思,在 ...
- MD5是用来加密的吗?BCrypt又是什么呢
文章目录 前言 MD5的八卦 BCrypt加密 自己加盐 工作负载 使用方便 总结 前言 最近经常看到一种关于 MD5 的说法,比如某某系统的登录模块使用了 MD5 加密算法,保证了用户密码的安全.那 ...
- Hash+哈希+哈希函数
Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数.哈希函数是一个 ...
- shiro认证+授权(使用MD5+salt+散列加密)
通过上文自定义realm分析源码可得https://blog.csdn.net/Kevinnsm/article/details/11183124 用户认证在doGetAuthenticationIn ...
- MD5 SHA1 哈希 签名 碰撞 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
最新文章
- 2022-2028年中国二次供水设备行业研究及前瞻分析报告
- 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍...
- MAC下 Apache服务器配置
- thingsboard官网单机并发量
- leetcode(977)有序数组的平方
- 计算收益复利的小例子
- mysql 禁止存储过程_为什么阿里巴巴禁止使用存储过程?
- Eclipse 模板使用
- android x5 webview 第一次,android:X5WebView 首次初始化 X5 内核耗时, 会产生卡顿现象的解决办法...
- 禁用驱动程序强制签名(终极办法)
- 攻击性Web测试框架(OWTF)是OWASP + PTES的重点,旨在联合优秀的工具使渗透测试更加高效,主要由Python编写
- 【华为HCIE考试卷在哪买?】
- winRAR去广告版
- Excel如何冻结多行多列
- 51物联卡:物联卡支持5G吗?怎么购买5G物联卡
- 如何在被保护的工作表(Worksheet)中使用Group Outlining
- [好文推荐] 给年轻程序员的8条建议
- Linux安装配置Tomcat 8.5.34 快捷启动,关闭(二)
- 网站中木马病毒了怎么办
- 负载均衡性能参数如何测评?