package com.lsn.whirlwindcontrol.admin.core.config;
import cn.hutool.core.codec.Base64;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.nio.file.Files;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.Security;
import java.security.spec.PKCS8EncodedKeySpec;
@Component
@Slf4j
@Configuration
public class P8ToPemConverter {
@Autowired
private ResourceLoader resourceLoader;
public void test() throws Exception {
Security.addProvider(new BouncyCastleProvider());
Resource resource1 = resourceLoader.getResource("classpath:" + "SubscriptionKey_YVVM9QXP5X.p8");
FileInputStream fis = new FileInputStream(resource1.getFile());
byte[] encodedKey = new byte[fis.available()];
fis.read(encodedKey);
fis.close();
byte[] privateKeyBytes = Files.readAllBytes(resource1.getFile().toPath());
String unencrypted = new String(privateKeyBytes);
unencrypted = unencrypted.replace("-----BEGIN PRIVATE KEY-----", "");
unencrypted = unencrypted.replace("-----END PRIVATE KEY-----", "");
byte[] decoded = Base64.decode(unencrypted);
KeyFactory keyFactory = KeyFactory.getInstance("EC");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded);
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
FileWriter pemWriter = new FileWriter("/Users/chengxue/Desktop/dog/SubscriptionKey_YVVM9QXP5X.pem");
PEMWriter writer = new PEMWriter(pemWriter);
writer.writeObject(privateKey);
writer.close();
System.out.println("PEM 格式的私钥已保存");
}
}
<!-- .p8 文件并保存为 .pem 格式 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version> <!-- 使用最新版本 -->
</dependency>