由于工作需要,要用.net的程序调用一个java编写的web service接口,接口的一个参数要求md5方式加密。
.net中的md5加密是很容易的,采用msdn中给出的方法:
可是,当输入的字符串是中文的时候,问题出现了,加密出来的字符串不一样:
输入 工作
java 8c87df93416ebdf251bcb6b328ec3c3b
.net 12e709e3a9a82b441b739a5c8ba035de
首先想到的是对中文的编码方式不一样,可是无论用utf8还是unicode结果都不同。
用google搜索 “java MD5 算法”找到的一篇文章解释了我的疑惑
http://blog.youkuaiyun.com/Peter_K/archive/2007/03/13/1527629.aspx
在.net中用同样的方式
这回结果一样
疑惑:这样在java中进行md5加密不知道是哪位大神的创造,java的String也有getBytes函数啊,为啥要把中文的多字节舍去呢?难道是因为getBytes()的默认结果是平台相关的,可getBytes可以指定编码格式啊,如getBytes("UTF-8"),我觉得这样得到的结果让人更加清楚。
幸好在goole的搜索中“java MD5 算法”排第一位,要不真要我困扰好久了。。。
把md5加密的结果记录如下:
输入
工作
输出
unicode:71626ce19b9ceee1cd9488793f3c282e
utf8:9a018b21ab114a51dd7b5979198a941b
default:12e709e3a9a82b441b739a5c8ba035de
char2byte:8c87df93416ebdf251bcb6b328ec3c3b