按短信模板生成短信
这里省略了发送短信的接口,只展示把数据与模板转化成最终发送数据的思路
/**
* 按短信模板生成短信
*
* @param map 数据{"code":"1234","captchaExpiration":"5"}
* @param template 模板(您的动态码为:{code},{captchaExpiration}分钟内有效,请勿泄露!)
* @return 短信内容(您的动态码为:1234,5分钟内有效,请勿泄露!)
*/
public static String buildMessage(Map<String,String> map, String template) {
// 使用正则表达式匹配模板中的所有占位符
Pattern pattern = Pattern.compile("\\{([^}]*)\\}");
Matcher matcher = pattern.matcher(template);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String key = matcher.group(1); // 获取占位符的键
String replacement = map.getOrDefault(key, "{UNKNOWN}").toString(); // 如果键不存在,则使用默认值 "{UNKNOWN}"
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
return sb.toString();
}
将字符串转换为MD5散列值
/**
* 将字符串转换为MD5散列值
*
* @param input 需要加密的字符串
* @return MD5散列后的字符串
*/
public static String encryptToMD5(String input) {
try {
// 创建 MessageDigest 对象用于生成MD5散列
MessageDigest md = MessageDigest.getInstance("MD5");
// 执行消息摘要
byte[] messageDigest = md.digest(input.getBytes(StandardCharsets.UTF_8));
// 将 byte 数组转换为 hex 字符串
BigInteger no = new BigInteger(1, messageDigest);
StringBuilder hashText = new StringBuilder(no.toString(16));
// 如果产生的散列值不足32位,则用0填充
while (hashText.length() < 32) {
hashText.insert(0, "0");
}
return hashText.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("MD5 algorithm not found", e);
}
}