当前位置: 首页 > news >正文

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

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

一。注意要点

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());

相关文章:

  • 面试宝典------经典
  • node.js环境搭建
  • 【5G核心网】手把手教你将Open5gs托管到k8s(KubeSphere)
  • 空城机在CSDN的四周年创作纪念日
  • C++ Reference: Standard C++ Library reference: C Library: clocale: struct lconv
  • JavaSE进阶--集合(2万字总结)
  • CKA考题 [k8s1.21]
  • AcWing第 70 场周赛题解
  • 读FFA-net: Feature Fusion Attention Network for Single Image Dehazing
  • 测试需求平台4-Flask实现API服务入门实战
  • js单行代码-----dom
  • 模型压缩常用方法简介
  • css常用属性
  • 【Android】Android Binder进程间通信AIDL示例与过程分析
  • C#教程 - 模式匹配(Pattern matching)
  • [NodeJS] 关于Buffer
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 30天自制操作系统-2
  • CSS魔法堂:Absolute Positioning就这个样
  • Java 多线程编程之:notify 和 wait 用法
  • java 多线程基础, 我觉得还是有必要看看的
  • Java,console输出实时的转向GUI textbox
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Nodejs和JavaWeb协助开发
  • spring + angular 实现导出excel
  • springboot_database项目介绍
  • 阿里云前端周刊 - 第 26 期
  • 搭建gitbook 和 访问权限认证
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于axios的vue插件,让http请求更简单
  • 微信小程序--------语音识别(前端自己也能玩)
  • 写给高年级小学生看的《Bash 指南》
  • 一、python与pycharm的安装
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​渐进式Web应用PWA的未来
  • (06)金属布线——为半导体注入生命的连接
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (笔试题)合法字符串
  • (第二周)效能测试
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (简单) HDU 2612 Find a way,BFS。
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十)T检验-第一部分
  • (四)模仿学习-完成后台管理页面查询
  • (学习日记)2024.01.19
  • (译)计算距离、方位和更多经纬度之间的点
  • (转载)Linux 多线程条件变量同步
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .gitignore文件---让git自动忽略指定文件
  • .net core webapi 大文件上传到wwwroot文件夹