我正在使用openssl 0.9.6g,并且已经使用RSA_generate_key()创建了公共/私有密钥对。当我用保存密钥时PEM_write_bio_RSAPublicKey,它为我提供了如下密钥:
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
我在.NET中有另一个模块,由于其格式,在传递此键时会引发异常。它采用如下格式:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
如何将我的密钥转换为这种格式。我正在使用C ++。
在.NET中,我使用的是openssl.net,代码如下:
string publicKey = @"-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAKGtqUVBBqcGCRYa7Sb6JVQirOX3hggWP2k7CzEtbF/soOONK510Kefm
omXBrGn2t79ES+hAcCvGSiiVZGuEb3UPiznzbiY150SME5nRC+zU0vvdX64ni0Mu
DeUlGcxM1eWSpozO71at6mxLloEMUg0oSWHfAlS5a4LVaURrJqXfAgMBAAE=
-----END RSA PUBLIC KEY-----";
Encoding enc = Encoding.ASCII;
string text = "hello world";
byte[] msg = enc.GetBytes(text);
CryptoKey key = CryptoKey.FromPublicKey(publicKey, "");
RSA rsa = key.GetRSA();
byte[] res = rsa.PublicEncrypt(msg, RSA.Padding.PKCS1);
例外情况如下:
CryptoKey key = CryptoKey.FromPublicKey(publicKey, "");
如果我使用密钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbhcU+fhYmYLESZQAj1hKBXsNY
si0kYHNkxpP7ftxZiTFowWUVXHzQgkcYiCNnp3pt1eG6Vt0WDzyFYXqUUqugvX41
gkaIrKQw/sRiWEx49krcz7Vxr3dufL6Mg3eK7NyWDGsqwFrx/qVNqdhsHg12PGNx
IMY4UBtxin2A8pd4OwIDAQAB
-----END PUBLIC KEY-----
工作正常。
我一直在寻找这个问题。我认为我正在寻找的是“如何将rsa公钥从pkcs#1转换为x509格式。