parent
517ca3016e
commit
7c82e5dcfe
@ -0,0 +1,26 @@ |
|||||||
|
package com.novel.read.data.model |
||||||
|
|
||||||
|
/** |
||||||
|
* @description: 参数校验DTO |
||||||
|
* @author: zlj |
||||||
|
* @date: 2020/9/25 9:50 |
||||||
|
*/ |
||||||
|
class CheckSumDTO( |
||||||
|
/** |
||||||
|
* 对外接口接入方 appid |
||||||
|
*/ |
||||||
|
private var appid: String, |
||||||
|
/** |
||||||
|
* 随机数,最大128位 |
||||||
|
*/ |
||||||
|
private var nonce: String, |
||||||
|
/** |
||||||
|
* 当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数(String),接口调用有效期为该时间戳起5分钟内 |
||||||
|
*/ |
||||||
|
private var curtime: String, |
||||||
|
/** |
||||||
|
* SHA1(AppSecret+Nonce+curTime),三个参数拼接的字符串,进行SHA1哈希计算, |
||||||
|
* 转化成16进制字符(String, 小写)。其中AppSecret为平台分配的Appid对应的AppSecret密钥 |
||||||
|
*/ |
||||||
|
private var checksum: String |
||||||
|
) |
@ -0,0 +1,94 @@ |
|||||||
|
package com.novel.read.utils; |
||||||
|
|
||||||
|
import java.security.MessageDigest; |
||||||
|
import java.util.Random; |
||||||
|
|
||||||
|
/** |
||||||
|
* 功能说明:验证码生成工具类 |
||||||
|
* 修改说明: |
||||||
|
* @author hu |
||||||
|
* @date 2021年4月6日 下午1:33:26 |
||||||
|
* @version 0.1 |
||||||
|
*/ |
||||||
|
public class CheckSumBuilder { |
||||||
|
/** |
||||||
|
* 功能说明:计算并获取CheckSum |
||||||
|
* 修改说明: |
||||||
|
* @author hu |
||||||
|
* @date 2021年4月6日 下午1:33:26 |
||||||
|
* @param appSecret 密码 |
||||||
|
* @param nonce 随机串 |
||||||
|
* @param curTime 当前时间戳 |
||||||
|
* @return 返回生成的验证码 |
||||||
|
*/ |
||||||
|
public static String getCheckSum(String appSecret, String nonce, String curTime) { |
||||||
|
return encode("sha1", appSecret + nonce + curTime); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 功能说明:对参数进行MD5加密 |
||||||
|
* 修改说明: |
||||||
|
* @author hu |
||||||
|
* @date 2021年4月6日 下午1:33:26 |
||||||
|
* @param requestBody 要加密的内容 |
||||||
|
* @return 返回MD5加密后的字符串 |
||||||
|
*/ |
||||||
|
public static String getMD5(String requestBody) { |
||||||
|
return encode("md5", requestBody); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 功能说明:使用指定加密算法对字符串进行加密 |
||||||
|
* 修改说明: |
||||||
|
* @author hu |
||||||
|
* @date 2021年4月6日 下午1:33:26 |
||||||
|
* @param algorithm 加密算法 |
||||||
|
* @param value 要加密的字符串 |
||||||
|
* @return 返回加密后的字符串 |
||||||
|
*/ |
||||||
|
private static String encode(String algorithm, String value) { |
||||||
|
if (value == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
try { |
||||||
|
MessageDigest messageDigest = MessageDigest.getInstance(algorithm); |
||||||
|
messageDigest.update(value.getBytes()); |
||||||
|
return getFormattedText(messageDigest.digest()); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 功能说明:把字节数组格式化为16进制字符串 |
||||||
|
* 修改说明: |
||||||
|
* @author hu |
||||||
|
* @date 2021年4月6日 下午1:33:26 |
||||||
|
* @param bytes 字节数组 |
||||||
|
* @return 返回格式化后的字符串 |
||||||
|
*/ |
||||||
|
private static String getFormattedText(byte[] bytes) { |
||||||
|
int len = bytes.length; |
||||||
|
StringBuilder buf = new StringBuilder(len * 2); |
||||||
|
for (int j = 0; j < len; j++) { |
||||||
|
buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]); |
||||||
|
buf.append(HEX_DIGITS[bytes[j] & 0x0f]); |
||||||
|
} |
||||||
|
return buf.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; |
||||||
|
|
||||||
|
|
||||||
|
public static String getRandomString(int length){ |
||||||
|
String str="abcdefghijklmnopqrstuvwxyz0123456789"; |
||||||
|
Random random=new Random(); |
||||||
|
StringBuilder sb=new StringBuilder(); |
||||||
|
for(int i=0;i<length;i++){ |
||||||
|
int number=random.nextInt(36); |
||||||
|
sb.append(str.charAt(number)); |
||||||
|
} |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue