MD5 加密

发布时间:2024年01月19日

任务:

接到一个任务,调用对方的接口,内容和密码,需要使用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。

? ? ?

文章来源:https://blog.csdn.net/qq_35461948/article/details/135697299
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。