РЕДАКТИРОВАТЬ: поскольку я не мог заставить этот код работать, я сделал небольшое обходное решение: теперь я вызываю консоль openssl через ShellExecute (не очень безопасно, но работает).
Доброе утро всем, у меня болит голова, чтобы заставить работать этот код 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;
Проблема в том, что «подписавший.LoadKeysFromStream (keyStream, [partPublic]);» процедура продолжает завершаться ошибкой с исключением «Ошибка потока»; файл правильно открыт в режиме чтения.
Содержимое файла открытого ключа
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsU4LA0ZLWO+twuoReM41
...
-----END PUBLIC KEY-----
(у меня есть полный ключ, но я предпочитаю не разглашать)
Кто-нибудь может мне помочь? Я читал о заполнении pkcs # 1 и команде openssl (Lockbox 3 загрузить открытый ключ невозможно - ошибка чтения потока)
openssl rsa -pubin -in yourpublickey -RSAPublicKey_out -out publicpkcs1
но «-RSAPublicKey_out» не распознается (OpenSSL 0.9.8zh, 14 января 2016 г.). Еще у меня есть закрытый ключ.
Спасибо всем, кто может мне помочь!
обновление: я пытался также сгенерировать криптографические ключи, но я не могу их прочитать.
signatory.storeKeysToStream
результат тот же.
Я скачал библиотеку здесь: https://github.com/TurboPack/LockBox