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 ...
随机推荐
- GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台
部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...
- Java里List取并集方法retainAll不能用来判断是否有重复数据!
网上找的源码 public boolean retainAll(Collection<?> c){ boolean modified = false; Iterator&l ...
- ubuntu配置tftp服务
ubuntu配置TFTP服务: TFTP是用来下载远程文件的最简单的网络协议,基于UDP协议.xinetd是新一代的网络守护进程服务程序,经常用于管理多种轻量型internet服务. sudo apt ...
- Gulp自动添加版本号(转载)
本文转载自: gulp自动添加版本号
- Extjs 3.4 同值合并
摘自:http://www.cnblogs.com/kunpengit/archive/2012/11/13/2768239.html/** * grid gridPanel 需要合并的表格 * ro ...
- html标签中meta属性使用介绍
前言 meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用 ...
- 2013ACM/ICPC亚洲区南京站现场赛-HDU4809(树形DP)
为了这个题解第一次写东西..(我只是来膜拜爱看touhou的出题人的).. 首先以为对称性质..我们求出露琪诺的魔法值的期望就可以了..之后乘以3就是答案..(话说她那么笨..能算出来么..⑨⑨⑨⑨⑨ ...
- 数据分析 - 斯特鲁普效应(Stroop effect)
数据分析 - 斯特鲁普效应(Stroop effect) Reinhard得到了一份斯特鲁普效应试验的数据,我们来分析下,文字的颜色,是否会影响受试者的反应. 这里先看看什么是斯特鲁普效应: 斯特鲁普 ...
- [课程设计]Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计)
Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团 ...
- Orcle数据库 表的 内置函数 内链接 外连接 相关练习题