文档章节

md5加密 控制台传入与web传入参数 md5加密结果不同

w
 walala_Lee
发布于 2017/09/10 13:53
字数 374
阅读 11
收藏 0

问题描述:相同的字符串,通过main方法调用md5加密的结果,与web api参数接收后,md5加密,结果却不同。

import java.io.UnsupportedEncodingException;  
import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
  
public class MD5Digest {  
    private static MessageDigest md5=null;  
    public static String getDigest(String msg) throws UnsupportedEncodingException, NoSuchAlgorithmException {  
        if(null == md5) {  
            md5=MessageDigest.getInstance("MD5");  
        }  
        byte[] byteArray=null;  
        byteArray=msg.getBytes();   
        byte[] md5Bytes=md5.digest(byteArray);  
        StringBuffer hexValue=new StringBuffer();  
        for(int i=0; i < md5Bytes.length; i++) {  
            int val=((int)md5Bytes[i]) & 0xff;  
            if(val < 16)  
                hexValue.append("0");  
            hexValue.append(Integer.toHexString(val));  
        }  
        return hexValue.toString();  
    }  
}  

查看MD5的代码实现(如上),会发现

byteArray=msg.getBytes();

该行代码在不同的环境下获得的结果可能不同,这样也造成MD5结果不一样的原因。

要保证在不同环境下MD5结果相同,则必须使用相同的字符编码,比如:

byteArray=msg.getBytes("UTF-8"); 

/** 对字符串进行MD5加密 */  
private static String encodeByMD5(String originString) {  
    if (originString != null) {  
        try {  
            // 创建具有指定算法名称的信息摘要  
            MessageDigest md = MessageDigest.getInstance("MD5");  
            // 使用指定的字节数组对摘要进行最后更新,然后完成摘要计算  
            byte[] results = md.digest(originString.getBytes("UTF-8"));  
            // 将得到的字节数组变成字符串返回  
            String resultString = byteArrayToHexString(results);  
            return resultString.toUpperCase();  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
    return null;  
}  

该问题可以通过如下代码演示:

import static org.apache.commons.codec.digest.DigestUtils.md5Hex;

String text = "error606@qq.com|工工工|!@$%&1000";

String r1 = DigestUtils.md5Hex(text);

System.out.println(r1); //b08f601a7b6b440dfa3ed6eb353c2d24

String r2 = DigestUtils.md5Hex(text.getBytes("UTF-8"));

System.out.println(r2); //b08f601a7b6b440dfa3ed6eb353c2d24

String r3 = DigestUtils.md5Hex(text.getBytes("GBK"));

System.out.println(r3); //db9e73be9742ed2a66202a62f491ef03

String r4 = DigestUtils.md5Hex(text.getBytes("ISO-8859-1"));

System.out.println(r4); //cd64703ba680391d452765d564d7e13e

 

本文转载自:http://blog.csdn.net/wangjunjun2008/article/details/51322281

共有 人打赏支持
w
粉丝 3
博文 167
码字总数 50381
作品 0
深圳
私信 提问
restful 接口 安全性设计

1、MD5混淆 第三方调用restful接口时,参数如商品名称、商品ID、金额、MD5加密(商品名称+商品ID+金额+sign),后台接口服务,获取对应的参数,然后按照MD5加密顺序,将商品名称、商品ID、金...

zhu_kai1
2018/11/28
0
0
cxf + spring 的WS-Security示例

在按照网上的例子进行配置用户名令牌的例子,在server端的回调函数中获取的password 却一直是空,搜索了好半天,才找到(这个是MD5加密的): WSPasswordCallback 的passwordType属性和passw...

liangyx
2012/10/07
0
1
Java自带的MD5加密算法,同样的参数 生成的结果不同?

就是这个方法: byte[] bytes = MessageDigest.getInstance("MD5").digest(param.getBytes()); 代码很简单 使用上边的param 传入,在 eclipse 里 正常使用,可是 打成jar包 老是 出现问题,后......

Inszt
2016/03/08
1K
3
Eleven.Lee/Daimali.ISV

在开放的API接口中为了保证数据的安全性,我们往往采用数字签名的方式对请求进行加密 功能 Sign签名 应用授权 用户授权 错误参数 全局返回参数说明 1 Success 操作成功 100000 NULL Null值错...

Eleven.Lee
2016/08/07
0
0
BAT HTTP接口安全规范调查

今天在看书的时候,看到一句话觉得很有道理:“尽量通过读取协议头来获取有用的信息”,就萌生了一个想法,BAT公司提供的服务接口,有哪些信息是放到头部的? 百度 OCR接口:appkey放header里...

梦孤
2017/03/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
38分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
42分钟前
2
0
mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

吴伟祥
44分钟前
1
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
5
0
Amino——产品迭代

兴趣部落产品迭代 时间 版本号 更新内容 备注 2019年1月2日 v3.1.1 支持定制部落首页的内容tab,酋长可以将精华、相册、分类添加到部落首页啦。 支持申请酋长,酋长可以直接推送优质话题,快...

铸剑为犁413
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部