无法将公钥加载到内存中



我已经生成了一对私钥/公钥,并且我已经设法加载了私钥来签名一些字节。当我试图从内存中加载公钥来验证签名时,出现问题。

下面是一些代码:
  privateKey := BIO_new(BIO_s_mem);
  PEM_write_bio_RSAPrivateKey(privateKey,rsa,enc,nil,0,nil,PChar('1234567890'));
  publicKey := BIO_new(BIO_s_mem);
  PEM_write_bio_RSAPublicKey(publicKey,rsa);
  WriteLn(GetErrorMessage);
  //No error so far
  Writeln('Keys generated!');
  pKey := nil;
  PEM_read_bio_PrivateKey(privateKey,pKey,nil,PChar('1234567890'));
  // pKey is ok
  mKey := nil;
  PEM_read_bio_PUBKEY(publicKey,mKey,nil,nil);
  WriteLn(GetErrorMessage); 

最后一行输出的错误消息是

PEM routines : PEM_read_bio : no start line

我做错了什么

问题是你混合了PEM_write_bio_RSAPublicKey()PEM_read_bio_PUBKEY()。前者编写pkcs# 1 rsappublickey结构,而后者期望一个SubjectPublicKeyInfo结构。这两个结构不能互换,因此读取时出现错误。

要解决此错误,在将公钥写入BIO时使用PEM_write_bio_RSA_PUBKEY()

最新更新