转换PKCS8格式的RSA公钥为PKCS1格式的代码如下:

import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERBitString;
import org.bouncycastle.util.encoders.Base64;

import java.security.KeyFactory;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPublicKeySpec;

public class RSAKeyConverter {
    public static String convertPKCS8ToPKCS1(String pkcs8PublicKey) throws Exception {
        byte[] pkcs8Bytes = Base64.decode(pkcs8PublicKey);
        ASN1Sequence publicKeyASN1Object = ASN1Sequence.getInstance(pkcs8Bytes);
        DERBitString derBitString = (DERBitString) publicKeyASN1Object.getObjectAt(1);
        byte[] publicKeyBytes = derBitString.getBytes();
        
        RSAPublicKeySpec spec = new RSAPublicKeySpec(publicKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPublicKey rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(spec);
        
        return Base64.toBase64String(rsaPublicKey.getEncoded());
    }
}

可以使用该方法将PKCS8格式的RSA公钥转换为PKCS1格式的公钥。使用方法如下:

String pkcs8PublicKey = "-----BEGIN PUBLIC KEY-----\n" +
        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwB7z5Vp4xQl3n6XJv8cF\n" +
        "3U6UCRk+5Jhi+Q3r4vXwv8k5N+K5iK8gMwYUWv+5oVQ8QZ3tRvlI5HRR0eF3xv4x\n" +
        "9r4fuyu9d1z0o08zRH3mkd1GgKIGZTgKk6X4C8aKgzh6KzFhH4t1f0yQgwv/2HbY\n" +
        "8hUv3Q+7wGvZyKq1nYy6pJ8TQoT7l4qfG8wUEYy1dI9Qv0jTcvl8t5aDm3xuNRAz\n" +
        "y5vS4v1lX1M8ei1K92EEGjY1Xa3G8pFyY8F9b6Sc4+hfVT3D6zU0fjG7+DZ9QO5Z\n" +
        "XvqY7tEUqO3+8n11F4EBQrjvEgk0yzvjT1hjK4nUv7qDL2Oy3Gx5lAfY6gA7uiml\n" +
        "CQIDAQAB\n" +
        "-----END PUBLIC KEY-----";

try {
    String pkcs1PublicKey = RSAKeyConverter.convertPKCS8ToPKCS1(pkcs8PublicKey);
    System.out.println(pkcs1PublicKey);
} catch (Exception e) {
    e.printStackTrace();
}

注意:使用该方法需要引入Bouncy Castle库的依赖

tomcat下 rsa pkcs8转pkcs1会报错		ASN1Sequence publicKeyASN1Object = ASN1SequencegetInstanceBASE64_DECODERdecodepubKeyInPKCS8;		DERBitString derBitString = DERBitString publicKeyASN1ObjectgetObjectAt1;		re

原文地址: https://www.cveoy.top/t/topic/hLxr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录