Delphi LockBox3生成相同的RSA密钥对
我最近决定使用LockBox3 crypto组件集,并遵循有关如何使用以下链接生成RSA密钥对的简单文档: (正式文件) 当我应用这个过程时,我能够生成公钥和私钥并导出到文件 但是,当我决定使用相同的代码生成新的密钥对时,它仍然是相同的公钥和私钥(完全相同) 通常情况下不应该是这样,我们应该能够生成无限多个不同的密钥对,以防私钥因某种原因泄漏 是否有其他步骤来生成全部新密钥对,或者这是一个bug 我正在使用Delphi XE6并运行Lockbox 3组件(最新版本可从SourceForge获得)Delphi LockBox3生成相同的RSA密钥对,delphi,cryptography,key,rsa,lockbox-3,Delphi,Cryptography,Key,Rsa,Lockbox 3,我最近决定使用LockBox3 crypto组件集,并遵循有关如何使用以下链接生成RSA密钥对的简单文档: (正式文件) 当我应用这个过程时,我能够生成公钥和私钥并导出到文件 但是,当我决定使用相同的代码生成新的密钥对时,它仍然是相同的公钥和私钥(完全相同) 通常情况下不应该是这样,我们应该能够生成无限多个不同的密钥对,以防私钥因某种原因泄漏 是否有其他步骤来生成全部新密钥对,或者这是一个bug 我正在使用Delphi XE6并运行Lockbox 3组件(最新版本可从SourceForge获得
提前感谢在下一代之前随机化你的种子。为了获得最佳结果,请不要使用内置的随机程序。在
TRandomStream.randomize
方法中的uTPLb\u Random
单元中存在键入错误。现在它已修复(请参阅)
更正后,每次都会生成不同的密钥。不要使用锁盒生成加密密钥。时期“uTPLb\u Random”中的代码显然不安全。@CodesInChaos:您能具体说明一下吗?uTPLb_随机中什么是不安全的?
procedure TRandomStream.Randomize();
{$IFDEF SMWINDOWS} //Should be MSWINDOWS
var
hProv: THandle;
dwProvType, dwFlags: DWORD;
Provider1: string;
hasOpenHandle: boolean;
{$ENDIF}
begin
{$IFDEF SMWINDOWS} //Should be MSWINDOWS
Provider1 := Provider;
dwProvType := PROV_RSA_FULL;
dwFlags := CRYPT_SILENT;
hasOpenHandle := CryptAcquireContext(hProv, nil, PChar(Provider), dwProvType, dwFlags);
try
if (not hasOpenHandle) or (not CryptGenRandom(hProv, SizeOf(FValue), @FValue)) then
FValue := TimeStampClock();
finally
if hasOpenHandle then
CryptReleaseContext(hProv, 0);
end;
Crunch();
{$ENDIF}
end;