.net md5 java 偏移量_C# java MD5加密方不一致问题

说来惭愧,做开发几年了,一直在吸取,今天也写写自已关于技术的一点点理解,不正之处,请大家多多指点。

由于之前开发的项目使用的是C#,用户信息使用的C#的MD5加密码方式,而现在需要切换到Java平台下,关键问题是如何将用户信息通过Java方式的MD5加密码到与C#同样的结果。

经过查询资料与测试,Java与C#默认的MD5加密结果是一致的,主要是编码问题。

测试一:

C#代码  默认编码加密

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 classProgram2 {3 static void Main(string[] args)4 {5 String cleanString = "111111";6

7

8 System.Console.Write(MD5(cleanString));9

10

11 Console.Read();12

13 }14

15

16 public static string MD5(stringsText)17 {18 Byte[] clearBytes =Encoding.Default.GetBytes(sText);19 Byte[] hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);20 returnBitConverter.ToString(hashedBytes);21 }22 }

View Code

7f138c3a498d81b5ff1c7f66cbbd81e9.png

Java代码  默认编码加密

1 public static void main(String[] args) throwsNoSuchAlgorithmException,2 UnsupportedEncodingException {3 String s = "111111";4 System.out.println(makeMD5(s)); ;5

6 }7

8 public staticString makeMD5(String password) {9 MessageDigest md;10 try{11 md = MessageDigest.getInstance("MD5");12 md.update(password.getBytes());13 byte[] bPwd=md.digest();14 String pwd = new BigInteger(1, bPwd) .toString(16);15 if(pwd.length()%2==1){16 pwd="0"+pwd;17 }18 int length=pwd.length();19 StringBuffer sb=new StringBuffer(length+length/2-1);20 for(int i=0;i

说明:为了C#达到一致的格式,这里做了循环格式化

0a0d33bff8213916e3f926ef200872bf.png

测试二 Unicode编码

C# 将 上述代码中

1 Byte[] clearBytes =Encoding.Default.GetBytes(sText);

修改为

1 Byte[] clearBytes =Encoding.Unicode.GetBytes(sText);

结果:

70-66-A4-0F-42-77-69-CC-43-34-7A-A9-6B-72-93-1A

Java 将

1 md.update(password.getBytes());

修改为:

1 md.update(password.getBytes("UTF-16LE"));

结果:

70-66-A4-0F-42-77-69-CC-43-34-7A-A9-6B-72-93-1A

经过多轮测试,结果如下:

java与C#通过MD5加密结果不致,一般都是编码问题,下面列出编码对照

JAVA(加密码111111)

C#(加密码111111)

US-ASCII

96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12

ASCII

96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12

ISO-8859-1

96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12

ISO-8859-1

96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12

UTF-8

96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12

UTF-8

96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12

UTF-16BE

AA-61-7C-C9-92-81-C9-F5-1C-A0-72-9D-B9-30-FD-3D

BigEndianUnicode

AA-61-7C-C9-92-81-C9-F5-1C-A0-72-9D-B9-30-FD-3D

UTF-16LE

70-66-A4-0F-42-77-69-CC-43-34-7A-A9-6B-72-93-1A

Unicode

70-66-A4-0F-42-77-69-CC-43-34-7A-A9-6B-72-93-1A

UTF-16

6A-97-04-80-3E-CC-65-94-2F-A4-4E-F7-3A-11-B7-80

-

-

UTF-7

96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12

-

UTF-32

B7-7D-95-DB-0C-A3-41-3E-0F-79-F4-C5-47-F8-25-E5

以上是个人一点总结,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 传递bean_Java:如何将值从类/ bean传递给servlet

您没有将某些内容传递给servlet.你只需让servlet访问一些东西.您应该摆脱main()方法并将数据库交互代码移动到DAO类中.我还给模型类(带有时区和位置)一个以大写字母开头的更敏感的名称.总而言之,您应该更新代码,使其看起来如下所示:模型类,区域(只要它有意义,任意你…

java程序员的电脑配置_JAVA程序员笔记本电脑推荐?

如果主要是做JAVA开发,那其实需要考虑的因素有:CPU性能必须过得去,因为java相对来说比较消耗CPU资源,当然是大型java应用,题主如果学习java的时候,倒不是特别重要,基本上2020年主流笔记本CPU都可…

java oracle sql 参数_oracle pl/sql之在java中调用带有输入输出参数的oracle存储过程...

只需注意一点输出参数是用CallableStatement里面的registerOutParameter方法注册进去存储过程:import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;imp…

linux mysql 静态库_Linux静态库与动态库实例详解

Linux静态库与动态库实例详解1. Linux 下静态链接库编译与使用首先编写如下代码&#xff1a;// main.c#include "test.h"int main(){test();return 0;}// test.h#includeusing namespace std;void test();// test.c#include "test.h"void test(){cout<&…

java计算距离_java实现计算地理坐标之间的距离

java实现计算两经纬度点之间的距离&#xff0c;直接上代码&#xff0c;具体解释请参考注释package com.jttx.poi.utils;import com.jttx.poi.entity.point;/*** created by louis on 2014/9/2.*/public class geoutils {/*** 计算两经纬度点之间的距离(单位&#xff1a;米)* pa…

java htmlparser 使用教程_HTMLParser使用详解(1)

在研究搜索引擎的开发中&#xff0c;对于HTML网页的处理是核心的一个环节。网上有很多开源的代码&#xff0c;对于Java来说&#xff0c;HTMLParser是比较著名并且得到广泛应用的一个。HTMLParser的主页是http://htmlparser.sourceforge.net/&#xff0c;最后的更新是2006年9月的…

python mysql autocommit_MySQLdb autocommit的坑

今天写的一个小功能&#xff0c;里面要用MySQLdb更新数据库&#xff0c;语句如下sql "update %s.account_operation set status1 where username%s" % (allResDBInfos[db], username)变量替换后&#xff0c;是下面的样子update suspects.account_operation set stat…

java怎么在android系统上运行_Android == 在Android系统上运行JAVA程序

在linux上运行java程序&#xff0c;直接用javac编译&#xff0c;再用java运行就行了。但是在Android上&#xff0c;由于虚拟机和pc端的不同&#xff0c;所以操作方法也是不一样的。如果想在Android上运行Hello world&#xff01;。则需要一下步骤。/* File Name: Hello.java */…

python火爆的原因_为什么Python这么火爆?原因是什么?

2021年FRM主要时间节点2021年02月第二阶段报名时间&#xff1a;2021/02/01 - 2021/03/31首次注册&#xff1a;$1200 USD / 非首次注册&#xff1a;$790 USD2021年05月第一阶段报名时间&#xff1a;2021/05/01 - 2021/07/31首次注册&#xff1a;$1000 USD / 非首次注册&#xff…

java hashtable 遍历_Java HashTable forEach()用法及代码示例

Hashtable类的forEach(BiConsumer)方法对哈希表的每个条目执行BiConsumer操作&#xff0c;直到已处理完所有条目或该操作引发异常。 BiConsumer操作是按迭代顺序执行的哈希表键值对的函数操作。方法遍历Hashtable的每个元素&#xff0c;直到该方法处理完所有元素或发生异常为止…

java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径...

最近在复习java&#xff0c;下学期要用&#xff0c;写这个练手. 技术较粗糙&#xff0c;见谅.代码里用的是这幅地图&#xff0c;根据实际情况更改&#xff0c;在addNode方法中这个是运行结果&#xff0c;起点和终点在 运行wrap(String qidian, String zhongdian) 时定义代码&a…

java xml opencv_Java中使用opencv

零、前言作为图像处理出身&#xff0c;不仅仅要会C图像处理、matlab图像处理、python图像处理、最起码也得会java图像处理&#xff0c;当然我最终还都用的是opencv这个机器视觉库了。今天简单介绍一下java中如何使用opencv。一、配置库(1)官网下载opencv&#xff0c;在opencv\b…

java实现table可编辑_动态渲染可编辑单元格的Table

一、问题描述问题是这样的&#xff0c;后台传了xArr [x1, x2,...,xn]和yArr [y1, y2, ..yn]两个数组&#xff0c;前端要渲染出表格并且可以填写每个单元格的值&#xff0c;然后按照一定数据结构保存并传给后台&#xff0c;并且再次获取这个数据结构和数组xArr、yArr可以自己渲…

java编写统计玩家总数的程序_JAVA程序:输出一组数后如何统计特定数的总数

题目&#xff1a;定义一个int型的一维数组&#xff0c;包含40个元素&#xff0c;用来存储每个学员的成绩&#xff0c;循环产生40个0~100之间的随机整数&#xff0c;将它们存储到一维数组中&#xff0c;然后统计成绩低于平均分的学员的人数&#xff0c;并输出出...题目&#xff…

java包裹邮费计算_GitHub - honghailiang/FreightSystem: 基于Java Swing编写的简易运费计算工具...

FreightSystem基于java Swing编写的运费计算系统初始化数据从excel中读取数据&#xff0c;转化为对象(只保存基础数据&#xff1a;序列号、始发站、目的站、省份、100kg以下(元/kg)、100kg以上(元/kg)、到货(元/kg)、自提(元/kg)、补贴里程、公路里程、单价(元/吨公里))并保存到…

java需求设计_JavaWeb期末设计---需求分析文档. stage1

影院活动管理系统—需求分析文档目录第2章 需求分析2.1 用户需求2.1.1 业务需求2.1.2 商业需求2.1.3 特殊需求2.2 可行性分析2.2.1 技术可行性2.2.2 经济可行性2.3 系统功能2.3.1 功能概述2.3.2 E-R图2.3.4 Domian logic2.3.5 系统框架图-------------------------------------…

java字节流转字符流的步骤_字节流-java入门基础笔记-51CTO博客

[14]字节流一.字节流1.什么是字节流是IO流中的一种, 可以用来读写字节数据.2.字节流和字符流的区别计算机中存储任何数据都是以字节的形式, 所以字节流可以读写任意类型的数据.在读写的数据是字符的时候, 用字符流更方便.3.什么时候用字节流, 什么时候用字符流当从一个文本文件…

java c s是什么_Java在C/S

随着Java语言的日益流行&#xff0c;特别是Java与InternetWeb的密切结合&#xff0c;使它在全球取得了巨大的成功。Java语言以其独立于平台、面向对象、分布式、多线索及完善的安全机制等特色&#xff0c;成为现代信息系统建设中的良好的开发平台和运行环境。一、Java网络应用模…

java质数判断程序_java判断一个数是否为素数/质数

质数(prime number)又称素数&#xff0c;定义为一个大于1的自然数&#xff0c;除了1和它本身外&#xff0c;不能被其他自然数整除&#xff0c;换句话说就是该数除了1和它本身以外不再有其他的因数。第一个思路假如我们需要判断数字是33&#xff0c;因为所有的数都可以被1整除&a…

selenium java po模式_selenium + java po模式

po模式大概介绍&#xff0c;大家也可以自己百度看看Page Object模式主要是将每个页面设计为一个类class&#xff0c;这个类包含页面中需要测试的元素(按钮、输入框、URL、标题等)和实际操作方法&#xff0c;这样在写测试用例时可以通过调用页面类的方法和属性来获取页面元素和操…