yeg
2026-09-12 6af5b0ccfcfdee62c53d2edcac97c92ede876692
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.talentcard.server.business.payment.huifu;
 
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
 
import org.springframework.stereotype.Service;
 
@Service
public class HuifuSignatureService {
 
    private final HuifuPaymentProperties properties;
 
    public HuifuSignatureService(HuifuPaymentProperties properties) {
        this.properties = properties;
    }
 
    public boolean verifyCallbackPayload(String payload, String signatureText) {
        if (payload == null || payload.isBlank() || signatureText == null || signatureText.isBlank()) return false;
        String publicKeyText = compact(properties.getPlatformPublicKey());
        if (publicKeyText.isBlank()) return false;
        try {
            PublicKey publicKey = KeyFactory.getInstance("RSA")
                    .generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyText)));
            Signature signature = Signature.getInstance("SHA256WithRSA");
            signature.initVerify(publicKey);
            signature.update(payload.getBytes(StandardCharsets.UTF_8));
            return signature.verify(Base64.getDecoder().decode(signatureText));
        } catch (Exception ignored) {
            return false;
        }
    }
 
    private String compact(String value) {
        if (value == null) return "";
        return value.replace("-----BEGIN PUBLIC KEY-----", "")
                .replace("-----END PUBLIC KEY-----", "")
                .replaceAll("\\s", "");
    }
}