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

2024-06-08 17:48

本文主要是介绍md5加密 控制台传入与web传入参数 md5加密结果不同,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述:相同的字符串,通过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://www.cnblogs.com/phpdragon/p/4181712.html


这篇关于md5加密 控制台传入与web传入参数 md5加密结果不同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042884

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E

Java JAR 启动内存参数配置指南(从基础设置到性能优化)

《JavaJAR启动内存参数配置指南(从基础设置到性能优化)》在启动Java可执行JAR文件时,合理配置JVM内存参数是保障应用稳定性和性能的关键,本文将系统讲解如何通过命令行参数、环境变量等方式... 目录一、核心内存参数详解1.1 堆内存配置1.2 元空间配置(MetASPace)1.3 线程栈配置1.

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1