tomcat下 rsa pkcs8转pkcs1会报错 ASN1Sequence publicKeyASN1Object = ASN1SequencegetInstanceBASE64_DECODERdecodepubKeyInPKCS8; DERBitString derBitString = DERBitString publicKeyASN1ObjectgetObjectAt1; re
转换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库的依赖
原文地址: https://www.cveoy.top/t/topic/hLxr 著作权归作者所有。请勿转载和采集!