功能自测通过
This commit is contained in:
+33
-2
@@ -6,8 +6,12 @@ import org.bouncycastle.util.encoders.Hex;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.KeyPair;
|
||||
import java.security.KeyPairGenerator;
|
||||
import java.security.PublicKey;
|
||||
import java.security.Security;
|
||||
import java.security.Signature;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
import java.util.Base64;
|
||||
|
||||
@Service
|
||||
@@ -50,12 +54,39 @@ public class DeviceActivationService {
|
||||
|
||||
public String generateDeviceActivationPublicKey() {
|
||||
try {
|
||||
java.security.KeyPairGenerator keyGen = java.security.KeyPairGenerator.getInstance("EC", PROVIDER);
|
||||
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC", PROVIDER);
|
||||
keyGen.initialize(256);
|
||||
java.security.KeyPair keyPair = keyGen.generateKeyPair();
|
||||
KeyPair keyPair = keyGen.generateKeyPair();
|
||||
return Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("生成设备激活公钥失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
public KeyPair generateKeyPair() {
|
||||
try {
|
||||
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC", PROVIDER);
|
||||
keyGen.initialize(256);
|
||||
return keyGen.generateKeyPair();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("生成密钥对失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean verifySm2Signature(String data, String signatureBase64, String publicKeyBase64) {
|
||||
try {
|
||||
byte[] keyBytes = Base64.getDecoder().decode(publicKeyBase64);
|
||||
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
|
||||
java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("EC", PROVIDER);
|
||||
PublicKey publicKey = keyFactory.generatePublic(keySpec);
|
||||
|
||||
Signature signature = Signature.getInstance(SIGNATURE_ALGO, PROVIDER);
|
||||
signature.initVerify(publicKey);
|
||||
signature.update(data.getBytes(StandardCharsets.UTF_8));
|
||||
byte[] signatureBytes = Base64.getDecoder().decode(signatureBase64);
|
||||
return signature.verify(signatureBytes);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("SM2验签失败", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user