文档章节

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

w
 walala_Lee
发布于 2017/09/10 13:53
字数 374
阅读 10
收藏 0
点赞 0
评论 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
MessageDigest数字签名,加密

Java Cryptography Architecture,Java加密架构,java平台中用于访问和开发加密功能的框架。 MessageDigest 类 MessageDigest 类是一个引擎类,它是为了提供诸如 SHA1 或 MD5 等密码上安全的...

zh151832
2016/04/15
49
0
MD5 + salt 的加密算法

MD5 + salt 的加密算法 对于这次泄露门事件,因为本人的账号(CSDN)有在内所以很想说shit…同时觉得csdn真丢脸… 一直想不到csdn会用明文保存密码,上次忘记密码邮箱直接收到了密码的网站大...

likeUbuntu
2013/01/14
0
2
冷场了吗?我带着phpcms9.6.2 注入来救场了

0x00 背景 最近做代码审计的时候发现phpcms 有更新,现在漏洞详情基本不公开,想要知道漏洞的利用方法只能自己审计了,通常可进行新旧版本的代码比较了,来定位旧版本的漏洞位置,便下载了p...

漏斗社区
2017/12/27
0
0
ASP.Net中MD5和SHA1加密的几种方法

首先简单介绍一下MD5和SHA1: MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest开发出...

tinwai
2009/07/09
0
0
WPSEC-周计划(三)

这次来看看某著名大学—— 南京邮电大学的CTF题目吧~ (Ps:因本人较懒,所以做题时都是手工+度娘,几乎没有用到浏览器以外的工具,如有更好的办法,欢迎留言告知~) Web 签到题 直接查看源代...

BestBDs
01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mybaitis 通过Mapping 实现多表查询

1.实体类 1.1 用于做多表查询的类 public class CustomerCard { private Integer id;//主键 private String cardNumber; private Integer customerId;//用户id private String customerName;......

kuchawyz
7分钟前
0
0
Java语言学习(八):集合类框架

Java中提供了各种数据集合类,这些类主要用于保存复杂结构的数据。下面将介绍常用的几种集合类的用法。 ArrayList集合可以看做一个动态的数组,比普通数组更加灵活,更适合保存未知数量的数据...

海岸线的曙光
8分钟前
0
0
SpringBoot下Redis相关配置是如何被初始化的

参考网页 SpringBoot集成Redis的原理 https://blog.csdn.net/hry2015/article/details/74276423 https://blog.csdn.net/hry2015/article/details/75451705 application.yml配置文件中的属性是......

karma123
8分钟前
1
0
数据库事务的四大特性以及事务的隔离级别

本篇讲述数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是...

Java大蜗牛
16分钟前
0
0
Spring Boot 整合 MyBatis/通用Mapper/PageHelper分页插件

整合MyBatis 整合通用Mapper 1. POM依赖配置 <properties><mapper.starter.version>2.0.3-beta1</mapper.starter.version></properties><!-- 通用Mapper --><dependency><groupId>t......

OSC_fly
25分钟前
0
0
CentOS7 双网卡绑定

环境 操作系统 CentOS7.5,禁用 NetworkManager 服务 网卡 eth0 网卡 eth1 绑定网卡 bond0 网卡 eth0 配置 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=EthernetBOOTPROTO=noneD......

Colben
26分钟前
0
0
zk实战--rpc框架集群化

在看此篇内容时需要浏览下面内容 netty实战--手写rpc框架 前文功能简介以及功能扩充 利用netty来实现一个点对点的rpc调用。客户端和服务端都是靠手写地址进行socket同学的,无法1对多,也无法...

xpbob
43分钟前
12
0
springboot 发送邮件

获取授权码 添加配置 # 账号和密码spring.mail.username=aaa@qq.comspring.mail.password=bbb# 服务器地址spring.mail.host=smtp.qq.comspring.mail.properties.mail.smtp.ssl.en...

阿豪boy
43分钟前
0
0
如何使用GNU Ring?

文章名:如何使用GNU Ring? 作者:冰焰火灵X 1079092922@qq.com 文章许可:CC BY-SA 4.0 ##1. 安装 下载GNU Ring 点击左边选择你的系统版本(这里以 GNU/Linux 为例,我使用的是Mint 18.3)...

ICE冰焰火灵X
46分钟前
4
0
深入理解springMVC

什么是spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而...

Java填坑之路
51分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部