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

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

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

测试一:

C#代码  默认编码加密

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

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#达到一致的格式,这里做了循环格式化

测试二 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

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

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

  1. c md5加密 和java不一样_C#的MD5加密为什么和JAVA的加密出来的结果不一样?

    下面这个和java结果一样了.static void Main(string[] args) { string input = "3500000112345620141118050554&q ...

  2. 利用Java自带的MD5加密java.security.MessageDigest;

    MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...

  3. java 赋值md5_Hook Java API以获得MD5加密前数据

    Java实现MD5加密 在Java中,我们用MD5对数据进行加密,代码大概是这样的: import java.security.MessageDigest; import java.security. ...

  4. Java实现MD5加密及验证(两种方式,加盐md5与未加盐md5)

    一.加盐MD5加密工具 package com.dimpt.base.util;import java.io.UnsupportedEncodingException; import java.sec ...

  5. java messagedigest_Java 自带的加密类MessageDigest类(加密MD5和SHA)

    转载 转载自:http://www.tuicool.com/articles/nMNVVj Java 自带的数据加密类MessageDigest(MD5或SHA加密) 说明: 在网站中,为了保护网站会 ...

  6. Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

    前言 在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的.最经典的就是密码了.如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的. 那么我们就 ...

  7. Java实现Linux的md5加密,Linux_详细讲解:Linux系统GRUB的MD5加密方法,1、用grub-md5-crypt成生GRUB的md5密 - phpStudy...

    详细讲解:Linux系统GRUB的MD5加密方法 1.用grub-md5-crypt成生GRUB的md5密码: 通过grub-md5-crypt对GRUB的密码进行加密码运算,比如我们想设置grub的 ...

  8. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  9. Bootstrap4+MySQL前后端综合实训-Day06-PM【MD5加码-生成32位md5码、ResultData.java、分页查询用户数据、添加用户按钮的实现】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目录 MD5加码 生成32位md5码 ResultData.java 分页查询 ...

最新文章

  1. Git related
  2. 消防信号二总线有没电压_消防的电源总线和二总线的区别,二总线是不是信号..._消防考试_帮考网...
  3. android开发菜单,Android学习指南之十六:Android菜单详解
  4. bzoj 3572 [Hnoi2014]世界树——虚树
  5. linux怎么创建vi脚本,Vim 创建Python脚本时候自动补全解释器和编码方法
  6. 反射java_Java反射原理
  7. 阿里云云服务器的端口配置问题
  8. 博科查看光功率_法拉第旋光器:非互易性旋转光的偏振
  9. ORA-01858: 在要求输入数字处找到非数字字符 13行
  10. python setup.py install 出错_python setup.py install 失败
  11. 2019年新款iPhone高清渲染视频来了 强迫症慎点...
  12. orange实现逻辑回归_逻辑回归模型
  13. 熵的理解(玻尔兹曼分布)
  14. 任务方案思考:序列标注(NER)篇
  15. Linux下Apache服务器配置
  16. @PropertySource注解获取配置文件值
  17. Android常用组件,太全了
  18. 鸡兔同笼编程语言c,鸡兔同笼用c语言编程
  19. 学c语言前要学计算机导论吗,计算机导论与C语言
  20. java 判断用户名_java如何判断用户名和密码

热门文章

  1. mysql5.6.35安装_mysql5.6.35 二进制快速安装
  2. java 队列复制_复制一个文件夹里的文件到另一个目录下 (使用队列的方法实现)...
  3. linux vps 运行exe文件夹,在centos环境下运行.exe文件
  4. java获取年的第一天和最后一天_java中如何获取当前年份的第一天和最后一天
  5. 计算机关闭窗口可以使用alt,禁止使用Alt+F4关闭窗口完整代码
  6. 织梦 php 传值,php获取post参数的几种方式
  7. java 接口文件夹_Java NIO.2 使用Path接口来监听文件、文件夹变化
  8. mysql 5.7 flashback_Flashback for MySQL 5.7
  9. Win11系统设置绿色护眼模式的方法
  10. 如何在Unity3d平台下低延迟播放RTMP或RTSP流