2

秘密鍵と公開鍵のペアを生成し、秘密鍵をロードしていくつかのバイトに署名することができました。署名を検証するためにメモリから公開鍵をロードしようとすると、問題が発生します。

ここにいくつかのコードがあります:

  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

私は何を間違っているのですか?

4

1 に答える 1

4

問題は、あなたがミキシングしているということPEM_write_bio_RSAPublicKey()ですPEM_read_bio_PUBKEY()。前者はPKCS#1 RSAPublicKey構造を書き込みますが、後者はSubjectPublicKeyInfo構造を想定しています。2つの構造は互換性がないため、読み取り時にエラーが発生します。

このエラーを解決するにはPEM_write_bio_RSA_PUBKEY()、公開鍵をBIOに書き込むときに使用します。

于 2013-01-03T09:11:35.443 に答える