(编程语言界的丐帮 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
{
//默认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 互通的更多相关文章
- 如何在C#中生成与PHP一样的MD5 Hash Code
最近在对一个现有的系统进行C#改造,该系统以前是用PHP做的,后台的管理员登陆用的是MD5加密算法.在PHP中,要对一个字符串进行MD5加密非常简单,一行代码即可: md5("Somethi ...
- C# 实现MD5 Hash 计算
C#提供了一系列的加密库,可以让我们自由使用,这里我来介绍如何使用C#的加密库实现MD5 hash值的计算工作. 参考代码: private static String CalcMd5(String ...
- md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样
md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样
- 哈希(Hash)与加密(Encrypt)相关内容
1.哈希(Hash)与加密(Encrypt)的区别 哈希(Hash)是将目标文本转换成具有相同长度的.不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的.可 ...
- Hash哈希(一)
Hash哈希(一) 哈希是大家比较常见一个词语,在编程中也经常用到,但是大多数人都是知其然而不知其所以然,再加上这几天想写一个一致性哈希算法,突然想想对哈希也不是很清楚,所以,抽点时间总结下Hash知 ...
- md5增加指定的加密规则,进行加密
import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.securit ...
- MD5 SHA1 哈希 签名 碰撞 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型
第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型 Hash操作,redis中Hash在内存中的存储格式如下图: hset(name, key, value)name ...
- 上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中
上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中 前端:要用到一个插件,点击下载 <!DOCTYPE html> <html xmlns=&q ...
随机推荐
- Solution -「CF1373G」Pawns
小清新线段树题(( 每个位置的边只能向靠右的三个方向走,最后要走到一条基准线上.即对于一个点 \((x, y)\),它最后应该落在 \((k, y + |k - x|)\). 士兵可以一个一个进行移动 ...
- JavaScript数组方法总结及手写
目录 手写数组衍生方法 1.检测是否为数组 2.类数组转化为数组 3.数组扁平化 4.数组去重 5.数组使用Math.max 手写数组内置方法 1. Array.prototype.filter 2. ...
- 实践GoF的23种设计模式:观察者模式
摘要:当你需要监听某个状态的变更,且在状态变更时通知到监听者,用观察者模式吧. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:观察者模式>,作者: 元闰子 . 简介 现在有 ...
- 使用传统的方式遍历集合对集合中的数据进行过滤和使用Stream流的方式遍历集合对集合中的数据进行过滤
使用传统的方式,遍历集合,对集合中的数据进行过滤 class Test{ public static void main(String[] args){ ArrayList<String> ...
- reduce累加实现
与map端的模式类似,map端要重写Mapper方法,reduce端也要重写Reduce方法,这里有一个泛型,我们先看参数类型 分别对应输入keyin,valuein,keyout,valueout. ...
- 转:mysql保留关键字
原文链接:http://www.tuicool.com/articles/Brauq2e 从网上找了一个mysql的保留字列表,仅供参考. ADD ALL ALTER ANALYZE AND AS A ...
- 从零开始Blazor Server(5)--权限验证
序 之前我们一直使用的是微软自带的身份验证方式,即使用[Authorize]标签来做. 但是这种方式十分不灵活,微软推荐的方式是加Policy,但是这种方式对我们来说还是不够灵活. 所以本节我们用完全 ...
- Shell 编程基础语法
# shell脚本 # 如何运行shell脚本 sh test.sh source test.sh ./test.sh # 需要有执行权限 # source和其他两种的区别是.source不会开新进程 ...
- React Native环境配置、初始化项目、打包安装到手机,以及开发小知识
1.前言 环境:Win10 + Android 已经在Windows电脑上安装好 Node(v14+).Git.Yarn. JDK(v11) javac -version javac 11.0.15. ...
- 回溯、贪心、DP的区别和联系
四大常用算法:分治.贪心.回溯.动态规划 回溯算法是个"万金油".基本上能用跟动态规划.贪心解决的问题,都可以用回溯去解决.回溯算法相当于穷举搜索,穷举所有情况,然后得到最优解.不 ...