文档章节

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

w
 walala_Lee
发布于 2017/09/10 13:53
字数 374
阅读 10
收藏 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
深圳
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()); 代码很简单 String param = "action=MORE-PROBALITY&age=-1&appkey=483OedYnY945yTfdUd5Rxruf......

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
MYSQL --md5加密

需求如下 客户注册某一个app,填入电话号码,需要接收到验证码,然后进行注册。 客户操作 填入手机号码,点击获取验证码。 app操作 传入三个参数给后台:手机号码、自己随机生成的验证码(多少...

求是科技
2015/10/13
544
0

没有更多内容

加载失败,请刷新页面

加载更多

造谣造到t-io老巢了

只发当事人的截图,不发表评论,以免有引导嫌疑 PS1:截图是由不同的人发给我的 PS2:本人早就不在此微信群了 PS3:图3是2018-09-23的t-io官方群的一个发言小统计

talent-tan
10分钟前
15
0
heartbeat 资源

drbd+apache+heartbeat : http://blog.51cto.com/11838039/1827901 heartbeat双机热备的架设 : http://blog.51cto.com/11838039/1827560 对heaetbeat的深一步认识 : http://blog.51cto.co......

寰宇01
44分钟前
3
0
Spring 转换 model 为 json 时增加属性

缘起 目前的项目中有个需求是在附件对象转换成 json 时增加个 url 属性,以前的方式是在返回附件对象或列表时候做一次统一处理,这次想看看 spring 或者 jackson fasterxml 是否自带类似功能...

郁也风
今天
1
0
10大PHP比特币开源项目

如果你是一个Phper,如果你希望学习区块链,那么本文列出的 10个开源的Php比特币项目,将有助于你了解在自己的应用中 如何加入对比特币的支持。 如果你希望快速掌握使用Php对接比特币钱包的方...

汇智网教程
今天
1
0
springclould feign客户端添加全局参数

用springclould feign作为调用服务的客户端,一般来说参数可以写在feignclient的方法参数里 有时需要所有feign请求都统一添加一些参数,例如token用于鉴权等,可以这样做: 添加一个配置类,...

canneljls
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部