接到一个任务,调用对方的接口,内容和密码,需要使用md5进行加密,再发送请求。
参数说明:
参数名称 | 说明 | 备注 |
timespan | 时间戳 | 格式为yyyyMMddHHmmss |
pwd | 密码 | 此处用原始密码+时间戳做MD5加密,32位大写格式 |
msgfmt | 编码类型 | 选填,如果不填默认为GBK,可以选填GBK或者UTF8/UTF-8 |
content | 内容 | 做base64编码操作,编码方式使用msgfmt中的方式,如果msgfmt有值的话 |
?
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。
? ? ?