Skip to content

Instantly share code, notes, and snippets.

@ritou
Last active December 13, 2015 20:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ritou/4968015 to your computer and use it in GitHub Desktop.
Save ritou/4968015 to your computer and use it in GitHub Desktop.
openssl-rsa-pubkey-handling.pl This is RSA Public key Handling. 1. X.509 Cert to Public Key. 2. Modulus, Exponent to Public Key
#!/usr/bin/env perl
use strict;
use warnings;
use Crypt::OpenSSL::CA;
use Crypt::OpenSSL::RSA;
use Crypt::OpenSSL::Bignum;
use MIME::Base64 qw(decode_base64);
my $cert = << "EOS";
-----BEGIN CERTIFICATE-----
MIIDTDCCAjQCCQCQMxn30qKrhTANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFQWtpdGExDzANBgNVBAcTBllva290ZTETMBEGA1UEChMKU2Vj
b25kQXV0aDEjMCEGA1UEAxMaMm5kYXV0aC5vcGVuaWRjb25uZWN0LmluZm8wHhcN
MTMwMTA1MDM1NDU0WhcNMTQwMTA1MDM1NDU0WjBoMQswCQYDVQQGEwJKUDEOMAwG
A1UECBMFQWtpdGExDzANBgNVBAcTBllva290ZTETMBEGA1UEChMKU2Vjb25kQXV0
aDEjMCEGA1UEAxMaMm5kYXV0aC5vcGVuaWRjb25uZWN0LmluZm8wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuun7hfvzxUbPFa8B3HqY5b2FnIMAr3lxt
ZkQffX+jRbGYJ9DGEypVQ0xfH7Ilj5pJw4ixhQMAS3y3iparsYUM3+C6ympCGyOK
1n/YY8cLQIGyuUJSahnr9y3zlYpuywF3QVSpuWJ/RfYgUiFaSb4dZdcqQEOIm9eZ
fkAKHTOGLFLH6VgkCRtIVRbCbwmJMo6ezSqz8zJ0+Y+M2ghP0a8ApFig582kWeDI
Wd9w5R78I+wWTuFBR26hhXwCatjKOkwRbexmTUKHlpjk24+AhNTy7Wc4j41V/xZW
v9a+666yYgVMa7JInKH+H8wEqmNDLy69K3yWcDlnkIP91bvgtT5fAgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADiDlldPU20uSEaR+uA3iwEaXwBqTiJ4dDS/IHnnj8Kh
edPuWZjXRzWQvV+5yp5Sv8JrisMStLv6Cx8lCLUuIflkkIJa4VxqpWLhxy59YUyz
EPL+Kt0RZKeFIzOleaiXZ+LDSVbUuewsPeT+z0F1109FLGNSvJYIxtw+sY0Ey+Cy
qdCQCQnXUcdbimAsxFnQ1+BwkKiIDmOmplAuDAdL4oOpiyxovjBcmTx/NaNTajwr
OU6kk4p8tyT+mvqnU3NwfOv1a8jAE3BptLpi9v5UO1/WDmNZO2ejZS0KG6ccZsRA
7/GraFmoTCEM6Wy7bvvBiMKBEDmswzanqcR1eJYwx6A=
-----END CERTIFICATE-----
EOS
my $ca = Crypt::OpenSSL::CA::X509->parse($cert);
print "=== X.509 Cert to Public Key ===\n";
print "X.509 Cert : \n".$cert;
print "Public Key : \n".$ca->get_public_key->to_PEM;
print "Modulus : \n".$ca->get_public_key->get_modulus()."\n";
print "================================\n";
print "\n";
my $n = Crypt::OpenSSL::Bignum->new_from_hex($ca->get_public_key->get_modulus());
# If you want to use Base64 encoded Modulus
# my $n = Crypt::OpenSSL::Bignum->new_from_bin(decode_base64("0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc 5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw"));
my $e = Crypt::OpenSSL::Bignum->new_from_hex("010001");
# If you want to use Base64 encoded Exponent,
# my $e = Crypt::OpenSSL::Bignum->new_from_bin(decode_base64("AQAB"));
my $rsa_pubkey = Crypt::OpenSSL::RSA->new_key_from_parameters($n, $e);
print "=== Modulus, exponent to Public Key ===\n";
print "Modulus : \n".$ca->get_public_key->get_modulus()."\n";
print "Exponent : AQAB\n";
print "Public Key : \n".$rsa_pubkey->get_public_key_x509_string();
print "================================\n";
@ritou
Copy link
Author

ritou commented Feb 16, 2013

=== X.509 Cert to Public Key ===
X.509 Cert :
-----BEGIN CERTIFICATE-----
MIIDTDCCAjQCCQCQMxn30qKrhTANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFQWtpdGExDzANBgNVBAcTBllva290ZTETMBEGA1UEChMKU2Vj
b25kQXV0aDEjMCEGA1UEAxMaMm5kYXV0aC5vcGVuaWRjb25uZWN0LmluZm8wHhcN
MTMwMTA1MDM1NDU0WhcNMTQwMTA1MDM1NDU0WjBoMQswCQYDVQQGEwJKUDEOMAwG
A1UECBMFQWtpdGExDzANBgNVBAcTBllva290ZTETMBEGA1UEChMKU2Vjb25kQXV0
aDEjMCEGA1UEAxMaMm5kYXV0aC5vcGVuaWRjb25uZWN0LmluZm8wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuun7hfvzxUbPFa8B3HqY5b2FnIMAr3lxt
ZkQffX+jRbGYJ9DGEypVQ0xfH7Ilj5pJw4ixhQMAS3y3iparsYUM3+C6ympCGyOK
1n/YY8cLQIGyuUJSahnr9y3zlYpuywF3QVSpuWJ/RfYgUiFaSb4dZdcqQEOIm9eZ
fkAKHTOGLFLH6VgkCRtIVRbCbwmJMo6ezSqz8zJ0+Y+M2ghP0a8ApFig582kWeDI
Wd9w5R78I+wWTuFBR26hhXwCatjKOkwRbexmTUKHlpjk24+AhNTy7Wc4j41V/xZW
v9a+666yYgVMa7JInKH+H8wEqmNDLy69K3yWcDlnkIP91bvgtT5fAgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADiDlldPU20uSEaR+uA3iwEaXwBqTiJ4dDS/IHnnj8Kh
edPuWZjXRzWQvV+5yp5Sv8JrisMStLv6Cx8lCLUuIflkkIJa4VxqpWLhxy59YUyz
EPL+Kt0RZKeFIzOleaiXZ+LDSVbUuewsPeT+z0F1109FLGNSvJYIxtw+sY0Ey+Cy
qdCQCQnXUcdbimAsxFnQ1+BwkKiIDmOmplAuDAdL4oOpiyxovjBcmTx/NaNTajwr
OU6kk4p8tyT+mvqnU3NwfOv1a8jAE3BptLpi9v5UO1/WDmNZO2ejZS0KG6ccZsRA
7/GraFmoTCEM6Wy7bvvBiMKBEDmswzanqcR1eJYwx6A=
-----END CERTIFICATE-----
Public Key :
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArrp+4X788VGzxWvAdx6m
OW9hZyDAK95cbWZEH31/o0WxmCfQxhMqVUNMXx+yJY+aScOIsYUDAEt8t4qWq7GF
DN/guspqQhsjitZ/2GPHC0CBsrlCUmoZ6/ct85WKbssBd0FUqblif0X2IFIhWkm+
HWXXKkBDiJvXmX5ACh0zhixSx+lYJAkbSFUWwm8JiTKOns0qs/MydPmPjNoIT9Gv
AKRYoOfNpFngyFnfcOUe/CPsFk7hQUduoYV8AmrYyjpMEW3sZk1Ch5aY5NuPgITU
8u1nOI+NVf8WVr/WvuuusmIFTGuySJyh/h/MBKpjQy8uvSt8lnA5Z5CD/dW74LU+
XwIDAQAB
-----END PUBLIC KEY-----
Modulus :
AEBA7EE17EFCF151B3C56BC0771EA6396F616720C02BDE5C6D66441F7D7FA345B19827D0C6132A55434C5F1FB2258F9A49C388B18503004B7CB78A96ABB1850CDFE0BACA6A421B238AD67FD863C70B4081B2B942526A19EBF72DF3958A6ECB01774154A9B9627F45F62052215A49BE1D65D72A4043889BD7997E400A1D33862C52C7E95824091B485516C26F0989328E9ECD2AB3F33274F98F8CDA084FD1AF00A458A0E7CDA459E0C859DF70E51EFC23EC164EE141476EA1857C026AD8CA3A4C116DEC664D42879698E4DB8F8084D4F2ED67388F8D55FF1656BFD6BEEBAEB262054C6BB2489CA1FE1FCC04AA63432F2EBD2B7C967039679083FDD5BBE0B53E5F
================================

=== Modulus, exponent to Public Key ===
Modulus :
AEBA7EE17EFCF151B3C56BC0771EA6396F616720C02BDE5C6D66441F7D7FA345B19827D0C6132A55434C5F1FB2258F9A49C388B18503004B7CB78A96ABB1850CDFE0BACA6A421B238AD67FD863C70B4081B2B942526A19EBF72DF3958A6ECB01774154A9B9627F45F62052215A49BE1D65D72A4043889BD7997E400A1D33862C52C7E95824091B485516C26F0989328E9ECD2AB3F33274F98F8CDA084FD1AF00A458A0E7CDA459E0C859DF70E51EFC23EC164EE141476EA1857C026AD8CA3A4C116DEC664D42879698E4DB8F8084D4F2ED67388F8D55FF1656BFD6BEEBAEB262054C6BB2489CA1FE1FCC04AA63432F2EBD2B7C967039679083FDD5BBE0B53E5F
Exponent : 01001
Public Key :
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArrp+4X788VGzxWvAdx6m
OW9hZyDAK95cbWZEH31/o0WxmCfQxhMqVUNMXx+yJY+aScOIsYUDAEt8t4qWq7GF
DN/guspqQhsjitZ/2GPHC0CBsrlCUmoZ6/ct85WKbssBd0FUqblif0X2IFIhWkm+
HWXXKkBDiJvXmX5ACh0zhixSx+lYJAkbSFUWwm8JiTKOns0qs/MydPmPjNoIT9Gv
AKRYoOfNpFngyFnfcOUe/CPsFk7hQUduoYV8AmrYyjpMEW3sZk1Ch5aY5NuPgITU
8u1nOI+NVf8WVr/WvuuusmIFTGuySJyh/h/MBKpjQy8uvSt8lnA5Z5CD/dW74LU+
XwIDAQAB
-----END PUBLIC KEY-----
================================

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment