一。注意要点

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. SQLZOO练习三--SELECT within SELECT Tutorial

    This tutorial looks at how we can use SELECT statements within SELECT statements to perform more com ...

  2. 06 MySQL_数据冗余

    数据冗余--拆分表 如果表设计不合理,可能会出现大量的重复数据,这种现象被称为数据冗余,通过拆分表的形式可以解决此问题 保存集团总部下财务部里面的财务A部的张三工资8000 年龄18 保存集团总部下研 ...

  3. 【每天学一点-02】创建Node.js的第一个应用

    1.引入require模块,使用createServer()创建服务器 [server.js]文件 var http = require('http'); http.createServer(func ...

  4. 关于Google词向量模型(googlenews-vectors-negative300.bin)的导入问题

    起因 项目中有如下代码: word2vec = KeyedVectors.load_word2vec_format('./GoogleNews-vectors-negative300.bin', bi ...

  5. Nginx 集群部署(Keepalived)

    # Nginx集群部署 # 当我们的用户同时访问量达到一定量的时候,一台服务器是不够用的 # 这个时候我们需要解决这个问题肯定是要添加新的服务器去处理用户访问 # 多台服务器处理用户访问就需要我们集群 ...

  6. 日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”?

    作者 | 胡泽康 鄞乐炜 作者简介 胡泽康 联通(广东)产业互联网公司  大数据工程师,专注于开源大数据领域,从事大数据平台研发工作 鄞乐炜 联通(广东)产业互联网公司 大数据工程师,主要从事大数据平 ...

  7. 4步教你学会使用Linux-Audit工具

    摘要:简单来讲audit是Linux上的审计工具,可以用来记录和监控对文件.目录.系统资源的更改:Audit无法直接增强系统的安全性,但是它可以用于发现违反系统安全政策的行为. 本文分享自华为云社区& ...

  8. Shell第一章《变量》

    shell前言 什么是shell shell-'壳' 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称. Shell本身是 ...

  9. Redis技术

    Redis技术 Redis 简介 Redis 是一个 key-value 的 nosql 产品,存储的 value 类型更加丰富,包括 string(字符串), list(链表),set(集合),zs ...

  10. NOI 2019 省选模拟赛 T1【JZOJ6082】 染色问题(color) (多项式,数论优化)

    题面 一根长为 n 的无色纸条,每个位置依次编号为 1,2,3,-,n ,m 次操作,第 i 次操作把纸条的一段区间 [l,r] (l <= r , l,r ∈ {1,2,3,-,n})涂成颜色 ...