1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package com.szwl.util;
- import cn.hutool.core.util.RandomUtil;
- import com.huifu.bspay.sdk.opps.core.utils.DateTools;
- import com.huifu.bspay.sdk.opps.core.utils.RandomTools;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- 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();
- }
- }
|