9 changed files with 248 additions and 13 deletions
@ -0,0 +1,140 @@ |
|||
package com.bnyer.common.core.utils; |
|||
|
|||
import org.apache.commons.codec.digest.DigestUtils; |
|||
|
|||
import java.io.File; |
|||
import java.io.FileInputStream; |
|||
import java.io.IOException; |
|||
import java.io.InputStream; |
|||
import java.security.MessageDigest; |
|||
import java.security.NoSuchAlgorithmException; |
|||
|
|||
/** |
|||
* @author :WXC |
|||
* @Date :2023/05/12 |
|||
* @description : |
|||
*/ |
|||
public class MD5Util { |
|||
|
|||
/** |
|||
* 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合 |
|||
*/ |
|||
protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', |
|||
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; |
|||
|
|||
protected static MessageDigest messagedigest = null; |
|||
static { |
|||
try { |
|||
messagedigest = MessageDigest.getInstance("MD5"); |
|||
} catch (NoSuchAlgorithmException nsaex) { |
|||
System.err.println(MD5Util.class.getName() |
|||
+ "初始化失败,MessageDigest不支持MD5Util。"); |
|||
nsaex.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 生成字符串的md5校验值 |
|||
* |
|||
* @param s |
|||
* @return |
|||
*/ |
|||
public static String getMD5String(String s) { |
|||
return getMD5String(s.getBytes()); |
|||
} |
|||
public static String getStaffMD5String(String staffId,String s) { |
|||
|
|||
return getMD5String((staffId+s).getBytes()); |
|||
} |
|||
public static String getUserMD5String(String userId,String s) { |
|||
return getMD5String(s.getBytes()); |
|||
} |
|||
|
|||
/** |
|||
* 判断字符串的md5校验码是否与一个已知的md5码相匹配 |
|||
* |
|||
* @param password 要校验的字符串 |
|||
* @param md5PwdStr 已知的md5校验码 |
|||
* @return |
|||
*/ |
|||
public static boolean checkPassword(String password, String md5PwdStr) { |
|||
String s = getMD5String(password); |
|||
return s.equals(md5PwdStr); |
|||
} |
|||
|
|||
/** |
|||
* 生成文件的md5校验值 |
|||
* |
|||
* @param file |
|||
* @return |
|||
* @throws IOException |
|||
*/ |
|||
public static String getFileMD5String(File file) throws IOException { |
|||
InputStream fis; |
|||
fis = new FileInputStream(file); |
|||
byte[] buffer = new byte[1024]; |
|||
int numRead = 0; |
|||
while ((numRead = fis.read(buffer)) > 0) { |
|||
messagedigest.update(buffer, 0, numRead); |
|||
} |
|||
fis.close(); |
|||
return bufferToHex(messagedigest.digest()); |
|||
} |
|||
public static String getFileMD5String(InputStream fis) throws IOException { |
|||
byte[] buffer = new byte[1024]; |
|||
int numRead = 0; |
|||
while ((numRead = fis.read(buffer)) > 0) { |
|||
messagedigest.update(buffer, 0, numRead); |
|||
} |
|||
fis.close(); |
|||
return bufferToHex(messagedigest.digest()); |
|||
} |
|||
|
|||
public static String getMD5String(byte[] bytes) { |
|||
messagedigest.update(bytes); |
|||
return bufferToHex(messagedigest.digest()); |
|||
} |
|||
|
|||
private static String bufferToHex(byte bytes[]) { |
|||
return bufferToHex(bytes, 0, bytes.length); |
|||
} |
|||
|
|||
private static String bufferToHex(byte bytes[], int m, int n) { |
|||
StringBuffer stringbuffer = new StringBuffer(2 * n); |
|||
int k = m + n; |
|||
for (int l = m; l < k; l++) { |
|||
appendHexPair(bytes[l], stringbuffer); |
|||
} |
|||
return stringbuffer.toString(); |
|||
} |
|||
|
|||
private static void appendHexPair(byte bt, StringBuffer stringbuffer) { |
|||
char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
|
|||
char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
|
|||
stringbuffer.append(c0); |
|||
stringbuffer.append(c1); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* MD5方法 |
|||
* |
|||
* @param text 明文 |
|||
* @param key 密钥 |
|||
* @return 密文 |
|||
* @throws Exception |
|||
*/ |
|||
public static String md5(String text, String key) throws Exception { |
|||
//加密后的字符串
|
|||
System.out.println("text + key "+text + key); |
|||
String encodeStr= DigestUtils.md5Hex(text + key); |
|||
System.out.println("MD5加密后的字符串为:encodeStr="+encodeStr); |
|||
return encodeStr; |
|||
} |
|||
|
|||
public static void main(String[] args) throws IOException { |
|||
System.out.println(MD5Util.getMD5String("RVWU202305121022211042vip")); |
|||
|
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
package com.bnyer.pay.enums; |
|||
|
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Getter; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
/** |
|||
* @author :WXC |
|||
* @Date :2023/05/12 |
|||
* @description : |
|||
*/ |
|||
@Getter |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public enum EnumVerificationKey { |
|||
VIP("vip", "VipInOrder20230512Key"), |
|||
; |
|||
private String key; |
|||
private String value; |
|||
} |
|||
@ -0,0 +1,39 @@ |
|||
package com.bnyer.pay.utils; |
|||
|
|||
import com.bnyer.common.core.utils.MD5Util; |
|||
import com.bnyer.pay.bean.dto.RefundDto; |
|||
import com.bnyer.pay.enums.EnumVerificationKey; |
|||
|
|||
/** |
|||
* @author :WXC |
|||
* @Date :2023/05/12 |
|||
* @description : 退款工具类 |
|||
*/ |
|||
public class PaymentRefundUtil { |
|||
|
|||
/** |
|||
* 获取签名 |
|||
* @param dto |
|||
* @return |
|||
*/ |
|||
public static String getSign(RefundDto dto) { |
|||
return MD5Util.getMD5String(dto.getPayId() + EnumVerificationKey.VIP.getValue()); |
|||
} |
|||
|
|||
/** |
|||
* 校验签名 |
|||
* @param dto |
|||
* @return |
|||
*/ |
|||
public static boolean checkSign(RefundDto dto) { |
|||
|
|||
return MD5Util.getMD5String(dto.getPayId() + EnumVerificationKey.VIP.getValue()).equals(dto.getSign()); |
|||
} |
|||
|
|||
public static void main(String[] args) { |
|||
String sign = MD5Util.getMD5String("RVWU202305121022211042" + EnumVerificationKey.VIP.getValue()); |
|||
System.out.println(sign); |
|||
System.out.println(MD5Util.getMD5String("RVWU202305121022211042" + EnumVerificationKey.VIP.getValue()).equals(sign)); |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue