当前位置: 首页 > news >正文

MD5 加密

任务:

接到一个任务,调用对方的接口,内容和密码,需要使用md5进行加密,再发送请求。

参数说明

参数名称

说明

备注

timespan

时间戳

格式为yyyyMMddHHmmss

pwd

密码

此处用原始密码+时间戳做MD5加密,32位大写格式

msgfmt

编码类型

选填,如果不填默认为GBK,可以选填GBK或者UTF8/UTF-8

content

内容

做base64编码操作,编码方式使用msgfmt中的方式,如果msgfmt有值的话

处理:

bast64编码处理:

 

md5

import org.apache.commons.codec.digest.DigestUtils;public class Md5Utils {/*** @param text 明文* @param key 密钥* @return 密文*/public static String md5(String text, String key) throws Exception {// 加密后的字符串String md5str = DigestUtils.md5Hex(text + key);System.out.println("MD5加密后的字符串为:" + md5str);return md5str;}/***  直接加密* @param text 明文* @return* @throws Exception*/public static String md5(String text) throws Exception {// 加密后的字符串String md5str = DigestUtils.md5Hex(text);System.out.println("MD5加密后的字符串为:" + md5str);return md5str;}/***  直接加密后变成大写* @param text 明文* @return* @throws Exception*/public static String md5Upper(String text) throws Exception {// 加密后的字符串String md5StrUp = DigestUtils.md5Hex(text).toUpperCase();System.out.println("MD5加密后大写的字符串为:" + md5StrUp);return md5StrUp;}public static void main(String args[]) throws Exception {String currentTimeSuffix = DatesUtils.getCurrentTimeSuffix();String pwd = "042556";md5(pwd, currentTimeSuffix);String pwdStr = "04255620230525112132";String pwdMdStr = md5Upper(pwdStr);System.out.println(pwdMdStr);}
}

 

时间处理

DatesUtils

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class DatesUtils {private static String datePattern = "yyyy-MM-dd";private static String dateHourPattern = "yyyy-MM-dd HH";private static String dateTimePattern = "yyyy-MM-dd HH:mm:ss";private static String dateTimePatternSSSXXX = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";private static String dateTimeSuffixPattern = "yyyyMMddHHmmss";private static String zeroTime = " 00:00:00";private static String endTime = " 23:59:59";public static String format(Date date, String pattern) {if (date == null)return "";return DateFormatUtils.format(date, pattern);}public static String format(Date date, String pattern, TimeZone timeZone) {if (date == null)return "";return DateFormatUtils.format(date, pattern, timeZone);}public static String formatDate(Date date) {if (date == null)return "";return DateFormatUtils.format(date, datePattern);}public static String formatDate(Date date, TimeZone timeZone) {if (date == null)return "";return DateFormatUtils.format(date, datePattern, timeZone);}public static String formatDateTime(Date date) {if (date == null)return "";return DateFormatUtils.format(date, dateTimePattern);}public static String formatDateTime(Date date, TimeZone timeZone) {if (date == null)return "";return DateFormatUtils.format(date, dateTimePattern, timeZone);}public static Date parseDate(String str) {if (StringUtils.isBlank(str))return null;try {return DateUtils.parseDate(str, datePattern);} catch (ParseException e) {e.printStackTrace();}return null;}public static Date parseDateTime(String str) {if (StringUtils.isBlank(str))return null;try {return DateUtils.parseDate(str, dateTimePattern);} catch (ParseException e) {e.printStackTrace();}return null;}public static Date parseDateTime(String str, String dateTimePattern) {if (str == null)return null;try {return DateUtils.parseDate(str, Locale.CHINESE, dateTimePattern);} catch (ParseException e) {e.printStackTrace();}return null;}public static Date formatDateTimeZero(Date date) {String formatDate = formatDate(date);return parseDateTime(formatDate + zeroTime);}public static Date formatDateTimeEnd(Date date) {String formatDate = formatDate(date);return parseDateTime(formatDate + endTime);}public static Date getCurDateTime() {Date date = new Date();String curDate = DateFormatUtils.format(date, dateTimePatternSSSXXX);return DatesUtils.parseDateTime(curDate, dateTimePatternSSSXXX);}public static Date getFirstOfHour(Date date) {String formatDate = format(date, dateHourPattern);return parseDateTime(formatDate + ":00:00");}public static Date getLastOfHour(Date date) {String formatDate = format(date, dateHourPattern);return parseDateTime(formatDate + ":59:59");}public static Date getFirstOfDay(Date date) {String formatDate = format(date, datePattern);return parseDateTime(formatDate + zeroTime);}public static Date getLastOfDay(Date date) {String formatDate = format(date, datePattern);return parseDateTime(formatDate + endTime);}/*** 获取指定日期所在月的第一天* @param date 日期* @return 所在月的第一天*/public static Date getFirstOfMonth(Date date) {//获取当前月第一天:Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.MONTH, 0);calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天return formatDateTimeZero(calendar.getTime());}/*** 获取指定日期所在月的第最后一天* @param date 日期* @return  最后一天*/public static Date getLastOfMonth(Date date) {//获取当前月最后一天Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));return formatDateTimeEnd(calendar.getTime());}/*** 获取当年的第一天*/public static Date getCurrentFirstOfYear() {Calendar currCal = Calendar.getInstance();int currentYear = currCal.get(Calendar.YEAR);return getFirstOfYear(currentYear);}/*** 获取当年的最后一天*/public static Date getCurrentLastOfYear() {Calendar currCal = Calendar.getInstance();int currentYear = currCal.get(Calendar.YEAR);return getLastOfYear(currentYear);}/*** 获取某年第一天日期* @param year 年份* @return Date*/public static Date getFirstOfYear(int year) {Calendar calendar = Calendar.getInstance();calendar.clear();calendar.set(Calendar.YEAR, year);return calendar.getTime();}/*** 获取某年第一天日期* @param date 日期* @return Date*/public static Date getFirstOfYear(Date date) {int year = Integer.parseInt(String.format("%tY", date));return formatDateTimeZero(getFirstOfYear(year));}/*** 获取某年最后一天日期* @param year 年份* @return Date*/public static Date getLastOfYear(int year) {Calendar calendar = Calendar.getInstance();calendar.clear();calendar.set(Calendar.YEAR, year);calendar.roll(Calendar.DAY_OF_YEAR, -1);return calendar.getTime();}/*** 获取某年最后一天日期* @param date 日期* @return Date*/public static Date getLastOfYear(Date date) {int year = Integer.parseInt(String.format("%tY", date));return formatDateTimeEnd(getLastOfYear(year));}/*** 计算两个日期之间的时间差,到秒* @param start  开始日期* @param end    结束日期* @return Long*/public static Long getDiffDatesToSec(Date start, Date end) {long startTime = start.getTime();long endTime = end.getTime();return (endTime - startTime) / 1000;}public static Date addDay(Date start, Integer day) {Calendar calendar = Calendar.getInstance();calendar.setTime(start);calendar.add(Calendar.DATE, day);return calendar.getTime();}public static Date addMonth(Date start, Integer month) {Calendar calendar = Calendar.getInstance();calendar.setTime(start);calendar.add(Calendar.MONTH, month);return calendar.getTime();}public static Long getRemainMilOneDay(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH, 1);calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);Long seconds = (calendar.getTime().getTime() - date.getTime());return seconds;}public static Long getDiffDays(Date start, Date end) {Long day = (parseDate(formatDate(end)).getTime() - parseDate(formatDate(start)).getTime())/ (1000 * 60 * 60 * 24);return day;}public static String getCurrentTimeSuffix() {Date now = new Date();return format(now, dateTimeSuffixPattern);}public static void testDifSec() {System.out.println("=========before year=========");Date beffore = parseDateTime("2012-10-10 12:00:00");Date after = parseDateTime("2012-10-10 12:00:50");Long diffDatesToSec = getDiffDatesToSec(beffore, after);System.out.println(diffDatesToSec);}public static void main(String args[]) {String format = getCurrentTimeSuffix();System.out.println(format);}
}

请求内容处理:

   public void sendNoticeConent(JSONObject userInfo, String content){ String pwd = MapUtils.getString(userInfo, "pwd");String timespan = DateUtils.getCurrentTimeSuffix();MultiValueMap<String, String> params= new LinkedMultiValueMap<>();params.put("pwd", Collections.singletonList(Md5Utils.md5(pwd, timespan)));params.put("timespan", Collections.singletonList(timespan));params.put("content", Collections.singletonList(Base64Utils.encode(content))); params.put("msgfmt", Collections.singletonList("UTF-8")); // 跟encode保持一致// 发送请求}

 

总结:

         MD5(Message Digest Algorithm 5)是一种常用的哈希算法,用于将任意长度的数据转换为固定长度的哈希值。它具有以下特色特点:

        1、不可逆性:MD5算法是一种单向哈希函数,即无法通过哈希值反推出原始数据。这意味着即使知道哈希值,也无法直接得到原始数据的内容。因此,MD5被广泛应用于密码存储等场景,增加了数据的安全性。

        2、高速性:相对于其他哈希算法,如SHA-1或SHA-256,MD5算法具有较高的计算速度。这使得MD5在处理大量数据时能够提供较快的计算效率,适用于需要频繁计算哈希值的场景。

        3、固定长度输出:MD5算法的输出固定为128位的哈希值,无论原始数据的长度如何,输出都是固定长度的。这为比较和存储哈希值提供了方便,同时也为验证数据完整性提供了基础。

        4、广泛应用:由于MD5算法的特点,它被广泛应用于数据校验、密码存储、数字签名等领域。例如,在网络传输中,可以使用MD5校验和来验证文件的完整性;在用户登录系统时,可以使用MD5加密存储密码,增加密码的安全性。

        5、容易实现:MD5算法的实现相对简单,算法流程清晰明了。这使得开发人员能够轻松地将MD5算法集成到自己的应用程序中,提供数据的哈希计算和校验功能。

        需要注意的是,由于MD5算法存在一些安全性问题,如碰撞攻击和彩虹表破解等,它已经不再被推荐作为密码存储的安全选择。在安全敏感的场景中,建议使用更强大的哈希算法,如SHA-256。

     

http://www.lryc.cn/news/283760.html

相关文章:

  • 在 Excel 中将列数据用单引号括起来并添加分隔符的解决方案
  • 技术硬实力,阿里巴巴为什么要开源Spring Cloud Alibaba?
  • 2024 前端高频面试题之 HTML/CSS 篇
  • 实现将信息作为txt,pdf,图片的形式保存到电脑~
  • 服务器变矿机,该如何应对?
  • 2018年认证杯SPSSPRO杯数学建模A题(第一阶段)海豚与沙丁鱼全过程文档及程序
  • 【Webpack】预处理器 - 常用loader介绍
  • lodash 的 _.groupBy 函数是怎么实现的?
  • (2024,ViM,双向 SSM 骨干,序列建模)利用双向状态空间模型进行高效视觉表示学习
  • docker容器和常用命令
  • 【征服redis9】快速征服lua脚本
  • vue3.2二次封装antd vue 中的Table组件,原有参数属性不变
  • GBASE南大通用分享,如何修改可信上下文
  • 冻结Prompt微调LM: T5 PET (a)
  • 119 BFS和DFS解二叉树的所有路径
  • SpringBoot缓存相关注解的使用
  • SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)
  • 计算机网络-甘晴void学习笔记
  • vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果
  • Android aar包集成与报错
  • CentOS 7.9 安装图解
  • Gitea Webhook报错 webhook.ALLOWED_HOST_LIST setting
  • SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数
  • 着色器语言GLSL学习
  • C#: form 窗体的各种操作
  • “尔滨”宠粉再升级!百亿像素VR冰雪盛宴
  • redis原理(四)redis命令
  • FairGuard游戏安全2023年度报告
  • 进阶Docker4:网桥模式、主机模式与自定义网络
  • Qt 状态机框架:The State Machine Framework (二)