C# java MD5加密方不一致问题
说来惭愧,做开发几年了,一直在吸取,今天也写写自已关于技术的一点点理解,不正之处,请大家多多指点。
由于之前开发的项目使用的是C#,用户信息使用的C#的MD5加密码方式,而现在需要切换到Java平台下,关键问题是如何将用户信息通过Java方式的MD5加密码到与C#同样的结果。
经过查询资料与测试,Java与C#默认的MD5加密结果是一致的,主要是编码问题。
测试一:
C#代码 默认编码加密
class Program
{
static void Main(string[] args)
{
String cleanString = ""; System.Console.Write(MD5(cleanString)); Console.Read(); } public static string MD5(string sText)
{
Byte[] clearBytes =Encoding.Default.GetBytes(sText);
Byte[] hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);
return BitConverter.ToString(hashedBytes);
}
}

Java代码 默认编码加密
public static void main(String[] args) throws NoSuchAlgorithmException,
UnsupportedEncodingException {
String s = "111111";
System.out.println(makeMD5(s)); ; } public static String makeMD5(String password) {
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte[] bPwd=md.digest();
String pwd = new BigInteger(1, bPwd) .toString(16);
if(pwd.length()%2==1){
pwd="0"+pwd;
}
int length=pwd.length();
StringBuffer sb=new StringBuffer(length+length/2-1);
for(int i=0;i<length;i+=2){
sb.append(pwd.substring(i, i+2));
if(i+2<length)
sb.append("-");
}
return sb.toString().toUpperCase();
} catch (Exception e) {
e.printStackTrace();
}
return password;
}
说明:为了C#达到一致的格式,这里做了循环格式化

测试二 Unicode编码
C# 将 上述代码中
Byte[] clearBytes =Encoding.Default.GetBytes(sText);
修改为
Byte[] clearBytes =Encoding.Unicode.GetBytes(sText);
结果:
70-66-A4-0F-42-77-69-CC-43-34-7A-A9-6B-72-93-1A
Java 将
md.update(password.getBytes());
修改为:
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 | |
java编码:http://docs.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html
以上是个人一点总结,欢迎指正!
C# java MD5加密方不一致问题的更多相关文章
- js和java MD5加密
项目中用到js MD5加密和后台java MD5加密,刚开始加密后两个不一致,网上找了好久终于找到一个啦,记下来: md5.js /* * A JavaScript implementation of ...
- js MD5加密与 java MD5加密不一致
因为该项目会部署到多台机器,所以需要用字符生成唯一的MD5,但是js生成的MD5和java生成的MD5不一致.经过博主查阅资料发现java生成MD5用的是utf-8的编码,而且js用的是2进制.那我就 ...
- Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同,如何保证JAVA MD5加密结果在不同的环境下都相同
开发中遇到md5加密不一致问题,排除了上下文编码,加密内容问题. 爬了各类资料,最终找到了原因. /** 对字符串进行MD5加密 */ private static String encodeByMD ...
- 那些年java MD5加密字符编码的坑
相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码.浏览器的字符编码等和对方不一致,所以就需要转码统一字符. 以下是笔者转码过 ...
- Java MD5加密与RSA加密
区别: MD5加密: 加密时通过原字符串加密成另一串字符串 解密时需要原加密字符串进行重新加密比较两次加密结果是否一致 T=RSA加密: 加密时通过原字符串生成密钥对(公钥+私钥) 解密时通过公钥和私 ...
- Java: md5 加密中文 & 注意编码
今天使用java的md5加密一个字符串(含有部分中文),遇到问题,百思不得其解. 后面网上搜索了一下,才知道是[编码]的问题. 以前在asp中用md5加密的时候,了解 gb2312和utf-8编码下, ...
- MySql md5加密 sqlserver md5加密 C# md5加密 java md5加密
便民md5加密: 百度md5加密: MySQL 加密语法: MD5(加密字符串) -- 中文加密 SELECT MD5('你好') -- 中文加密匹配查询 SELECT * FROM 表名 WHERE ...
- java MD5加密的工具类
import java.security.MessageDigest; /** * MD5加密工具类 * @author zwq */ public class MD5Util { /** * MD5 ...
- java md5加密 不依赖base64包
/** * MD5 加密 */ private String getMD5Str(String str) { MessageDigest messageDigest = null; try { mes ...
随机推荐
- Python调用C++
/***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> ...
- jQuery之元素的遍历与元素的过滤
jQuery遍历之向下遍历 jQuery遍历之向上遍历 jQuery遍历之同级遍历 jQuery遍历之过滤
- UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- rc.local文件
rc.local用于自启动一些服务. 查看有哪些自启动服务: cat /etc/rc.local
- UWP消息通知
在Windows 10通常是使用Toast通知方式进行的消息通知,但是在应用通知是不需要通知带有音效的,但是又不能在系统通知中心留下记录,那么需要监听ToastNotification实例的Dismi ...
- delphi 图像旋转
网络搜集的 觉得有用的拿去吧 速度不错呢 //旋转90° procedure Rotate(Bitmap: TBitmap); type THelpRGB = packed record rgb: ...
- LoadRunner培训初级教程
一 LoadRunner简介 1.1 Loadrunner介绍 LoadRunner 是 HP Mercury Interactive 用来测试应用程序性能的工具 LoadRunner 通过模拟一个 ...
- 《C++ API设计》作者Martin Reddy访谈问题征集
Martin Reddy博士是软件行业的一名老兵,有着15年以上的从业经验,共撰写过40多篇论文,拥有3项软件专利,并与他人合著了Level of Detail for 3D Graphics.另外, ...
- Python基础操作-函数
本节内容 1. 函数基本语法及特性2. 参数与局部变量3. 返回值4.递归5.高阶函数 1.函数基本语法及特性函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具 ...
- iOS中什么是superView?(新手概念简述版)
文/司马陶冶(简书作者)/文章有删改原文链接:http://www.jianshu.com/p/8537dac37852 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 在iPhone ...