Java自带的MD5加密算法,同样的参数 生成的结果不同?

Inszt 发布于 2016/03/08 20:04
阅读 1K+
收藏 0
就是这个方法:
byte[] bytes = MessageDigest.getInstance("MD5").digest(param.getBytes());


代码很简单

String param = "action=MORE-PROBALITY&age=-1&app_key=483OedYnY945yTfdUd5Rxruf&app_secret=1rogPFfwMpa3U5cgrjsns99wy2QSx909&gender=1&symptom_word=呕吐&timestamp=1456392710093&uuid=867886020293415";
		byte[] bytes = MessageDigest.getInstance("MD5").digest(param.getBytes());
		for (byte b : bytes) {
			LogUtils.info("MD5-Byte:" + b);
		}



使用上边的param 传入,在 eclipse 里 正常使用,可是 打成jar包 老是 出现问题,后来排查 发现 这个加密方法  竟然 同样 的参数  两个地方的结果不同。





可是 我把 param 换成 比如 "111" 对比了一下,发现 又一样了。

好奇怪。。。

加载中
0
hhshenhuaxx
hhshenhuaxx

param.getBytes()方法换一下。在获取字节数组的时候要指定编码,不然会使用默认编码。然而windows和linux的默认编码不同,导致得到的字节数组不一样,加密得到的结果自然也不一样了。。。。

Inszt
Inszt
回复 @hhshenhuaxx : 确实是这样,在系统内 执行jar包的默认 编码 是 gbk,eclipse 内是utf-8;指定编码 就可以了。多谢。
行业协汇袁斌
行业协汇袁斌
回复 @hhshenhuaxx : 嗯, 确实如此, getBytes这个方法是平台相关的, 难怪会有问题, 这也可以理解, 没有指定编码当然按照系统默认的编码来操作了。。。
hhshenhuaxx
hhshenhuaxx
回复 @hhshenhuaxx : 不信 你弄一个中文的string,getBytes()和getBytes(String decode) decode可以为各种编码,然后比较一下得到的字节数组。绝对各不相同。
hhshenhuaxx
hhshenhuaxx
回复 @犯贱智障人士专职医生 : 按你的说话读到的String是一致的,然后string.getBytes()呢? 你看一下jdk api 绝逼有一个String.getBytes(String decode) 的方法,这个方法的意思就是按照指定的编码格式获取字节数组。如果不传这个decode,它就会按默认的来获取。
行业协汇袁斌
行业协汇袁斌
这个有道理,但是这个参数不是硬编码保存在文件中的吗, 文件自身的编码是固定的。在执行程序的时候读取的内容在不同的操作系统下应该是一致的吧。。。
下一页
0
loyal
loyal

编码问题吧?

一个Eclipse内,一个系统内

loyal
loyal
回复 @Inszt : ...我回答的...
Inszt
Inszt
是的,谢谢
0
loyal
loyal
你的流加个编码再试
返回顶部
顶部