123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package com.szwl.util;
- import cn.hutool.core.util.RandomUtil;
- import com.huifu.bspay.sdk.opps.core.utils.DateTools;
- import lombok.extern.slf4j.Slf4j;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.security.KeyFactory;
- import java.security.PrivateKey;
- import java.security.PublicKey;
- import java.security.Signature;
- import java.security.spec.PKCS8EncodedKeySpec;
- import java.security.spec.X509EncodedKeySpec;
- import java.util.Base64;
- @Slf4j
- public class HuifuUtils {
- /**
- * RSA私钥签名:签名方式SHA256WithRSA
- * @param data 待签名字符串
- * @param privateKeyBase64 私钥(Base64编码)
- * @return 签名byte[]
- * @throws Exception
- */
- public static String sign(String data, String privateKeyBase64) {
- // Base64 --> Key
- try {
- byte[] bytes = Base64.getDecoder().decode(privateKeyBase64);
- PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
- KeyFactory keyFactory;
- keyFactory = KeyFactory.getInstance("RSA");
- PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
- // Sign
- Signature signature = Signature.getInstance("SHA256WithRSA");
- signature.initSign(privateKey);
- signature.update(data.getBytes("UTF-8"));
- return Base64.getEncoder().encodeToString(signature.sign());
- } catch (Exception e) {
- return null;
- }
- }
- /**
- * 使用汇付RSA公钥验签
- * @param data 待签名字符串
- * @param publicKeyBase64 公钥(Base64编码)
- * @return 验签结果
- * @throws Exception
- */
- public static boolean verify(String data, String publicKeyBase64, String sign) {
- // Base64 --> Key
- try {
- byte[] bytes = Base64.getDecoder().decode(publicKeyBase64);
- X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
- KeyFactory keyFactory;
- keyFactory = KeyFactory.getInstance("RSA");
- PublicKey publicKey = keyFactory.generatePublic(keySpec);
- // verify
- Signature signature = Signature.getInstance("SHA256WithRSA");
- signature.initVerify(publicKey);
- signature.update(data.getBytes("UTF-8"));
- return signature.verify(Base64.getDecoder().decode(sign));
- } catch (Exception e) {
- log.error("Exception", e);
- return false;
- }
- }
- /**
- * 生成随机流水号
- * @return
- */
- public static String initReqSeqId() {
- String numbers = RandomUtil.randomNumbers(10);
- return new StringBuilder(DateTools.getCurrentDateTimeYYYYMMDDHHMMSSSSS()).append(numbers).toString();
- }
- /**
- * 转base64为图片
- * @param base64Str
- * @return
- * @throws IOException
- */
- public static File base64ToTempImage(String base64Str) throws IOException {
- // 解码base64字符串
- byte[] imageBytes = Base64.getDecoder().decode(base64Str.split(",")[1]);
- // 创建一个临时文件
- File tempFile = File.createTempFile("temp_image", ".jpg");
- // 将解码后的数据写入临时文件
- try (FileOutputStream fos = new FileOutputStream(tempFile)) {
- fos.write(imageBytes);
- }
- // 返回临时文件
- return tempFile;
- }
- }
|