【发布时间】:2014-09-03 02:59:43
【问题描述】:
我正在尝试读取 RSA 公钥,但 PEM_read_bio_RsaPublicKey 返回 0; 私钥 (PEM_read_bio_RsaPrivateKey) 的代码相同。
function TForm1.ReadPublicKey(AFileName: TFileName): pRSA;
var
keyfile: pBIO;
begin
keyfile := BIO_new(BIO_s_file());
BIO_read_filename(keyfile, PAnsiChar(UTF8Encode(AFileName)));
result := PEM_read_bio_RsaPublicKey(keyfile, nil, nil, nil);
if result = nil then
raise Exception.Create('Unable to read public key. ' + GetErrorMessage);
end;
我正在使用 Delphi XE6 + OpenSSL libs 1.0.1i + Indy 标头 IdSSLOpenSSLHeaders、IdSSLOpenSSLHeaders_static。
使用此命令行生成私钥和公钥...
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
...看起来像:
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDyYSxGmR95H9tO2Be82RyFd0KzqCH64D0ssUtURbYw4qJTeKln
..cut..
fKcHkq+cl7KKVi+nocAO8sUzzzBFy9TlXbx8cgN/PIFwvw==
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDyYSxGmR95H9tO2Be82RyFd0Kz
..cut..
WdCa/uFKyfIJHsQiuwIDAQAB
-----END PUBLIC KEY-----
这让我疯狂了 3 天。如果有人知道这里有什么问题,或者用其他方法来解密 MacOS/Firemonkey 中使用 PHP 在线加密的 RSA 字符串 - 请告诉我!我尝试了一些可以安装的 Lockbox 版本,但它与 OpenSSL 密钥不兼容...
更新:错误代码是
error:0906D06C:lib(9):func(109):reason(108)
error:0906D06C:PEM routines:PEM_read_bio:no start line
【问题讨论】:
标签: delphi encryption openssl rsa firemonkey