编辑:因为我无法让这段代码工作,所以我做了一个小解决方法:现在我通过 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 填充和 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