Created
June 5, 2020 03:45
-
-
Save russell-shizhen/97d1c19130b7e562a01ee25e516ce39c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.spongycastle.asn1.ASN1Encodable; | |
import org.spongycastle.asn1.ASN1Primitive; | |
import org.spongycastle.asn1.pkcs.PrivateKeyInfo; | |
import org.spongycastle.asn1.pkcs.RSAPrivateKey; | |
import org.spongycastle.crypto.params.AsymmetricKeyParameter; | |
import org.spongycastle.crypto.params.RSAKeyParameters; | |
import org.spongycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi; | |
import org.bouncycastle.util.io.pem.PemObject; | |
import org.bouncycastle.util.io.pem.PemWriter; | |
public class BouncyCastleUsage { | |
public static void main(String[] args) { | |
//Convert private key from PKCS8 to PKCS1: | |
PrivateKey priv = pair.getPrivate(); | |
byte[] privBytes = priv.getEncoded(); | |
PrivateKeyInfo pkInfo = PrivateKeyInfo.getInstance(privBytes); | |
ASN1Encodable encodable = pkInfo.parsePrivateKey(); | |
ASN1Primitive primitive = encodable.toASN1Primitive(); | |
byte[] privateKeyPKCS1 = primitive.getEncoded(); | |
//Convert private key in PKCS1 to PEM: | |
PemObject pemObject = new PemObject("RSA PRIVATE KEY", privateKeyPKCS1); | |
StringWriter stringWriter = new StringWriter(); | |
PemWriter pemWriter = new PemWriter(stringWriter); | |
pemWriter.writeObject(pemObject); | |
pemWriter.close(); | |
String pemString = stringWriter.toString(); | |
// Check with command line OpenSSL that the key format is as expected: | |
// openssl rsa -in rsa_private_key.pem -noout -text | |
// Convert public key from X.509 SubjectPublicKeyInfo to PKCS1: | |
PublicKey pub = pair.getPublic(); | |
byte[] pubBytes = pub.getEncoded(); | |
SubjectPublicKeyInfo spkInfo = SubjectPublicKeyInfo.getInstance(pubBytes); | |
ASN1Primitive primitive = spkInfo.parsePublicKey(); | |
byte[] publicKeyPKCS1 = primitive.getEncoded(); | |
// Convert public key in PKCS1 to PEM: | |
PemObject pemObject = new PemObject("RSA PUBLIC KEY", publicKeyPKCS1); | |
StringWriter stringWriter = new StringWriter(); | |
PemWriter pemWriter = new PemWriter(stringWriter); | |
pemWriter.writeObject(pemObject); | |
pemWriter.close(); | |
String pemString = stringWriter.toString(); | |
// Check with command line OpenSSL that the key format is as expected: | |
// openssl rsa -in rsa_public_key.pem -RSAPublicKey_in -noout -text | |
// pkcs8Bytes contains PKCS#8 DER-encoded key as a byte[] | |
PrivateKeyInfo pki = PrivateKeyInfo.getInstance(pkcs8Bytes); | |
RSAPrivateKeyStructure pkcs1Key = RSAPrivateKeyStructure.getInstance(pki.getPrivateKey()); | |
byte[] pkcs1Bytes = pkcs1Key.getEncoded(); // etc. | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment