編集:このコードを機能させることができなかったため、少し回避策を講じました:ShellExecuteを介してopensslコンソールを呼び出します(あまり安全ではありませんが、機能します)。
おはようございます。この Delphi コードを機能させるために頭痛がしています。
(included uTPLb_* libraries)
function Crypto.encodeRSA(msg:String;test:Boolean = False):String;
var
file_path:String;
keyStream:TMemoryStream;
res:String;
Codec:TCodec;
wasAborted:Boolean;
KeyPair:TAsymetricKeyPair;
Key:TSymetricKey;
lib:TCryptographicLibrary;
signatory:TSignatory;
begin
codec:=TCodec.Create(nil);
signatory:=TSignatory.Create(nil);
lib:=TCryptoGraphicLibrary.Create(nil);
try
if test then
begin
file_path:=PUBLIC_KEY_TEST_FILE;
end
else
begin
file_path:=PUBLIC_KEY_FILE;
end;
file_path:=GetCurrentDir+'\'+file_path;
keyStream:=TMemoryStream.Create;
keyStream.LoadFromFile(file_path);
codec.Reset;
codec.CryptoLibrary:=lib;
codec.ChainModeId:=ECB_ProgID;
codec.StreamCipherId:='native.RSA';
Codec.StreamCipherId:=RSA_ProgID;
signatory.Codec:=codec;
signatory.LoadKeysFromStream(keyStream,[partPublic]);
//stuff to do...
Result:=res;
finally
lib.Free;
codec.Free;
end;
end;
問題は「signatory.LoadKeysFromStream(keyStream,[partPublic]);」です。手順は引き続き「ストリーム エラー」例外で失敗します。ファイルは読み取りモードで正しく開いています。
公開鍵ファイルの内容は
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsU4LA0ZLWO+twuoReM41
...
-----END PUBLIC KEY-----
(私は完全な鍵を持っていますが、私は漏らしたくないです)
誰でも私を助けることができますか?pkcs#1 padding と openssl コマンドについて読みました (Lockbox 3 load public key not possible - stream reading error )
openssl rsa -pubin -in yourpublickey -RSAPublicKey_out -out publicpkcs1
しかし、「-RSAPublicKey_out」は認識されません (OpenSSL 0.9.8zh 2016 年 1 月 14 日)。私も秘密鍵を持っています。
私を助けることができるすべてに感謝します!
更新:暗号化キーも生成しようとしましたが、それらを読み取ることができません。
signatory.storeKeysToStream
結果は同じです。
ここでライブラリをダウンロードしました: https://github.com/TurboPack/LockBox