我最近决定遇到LockBox3加密组件集,并按照以下简单文档介绍如何使用以下链接生成RSA密钥对:
http://lockbox.seanbdurkin.id.au/Generate+an+RSA+key
(官方文件)
当我应用这个过程时,我能够生成公钥和私钥并导出到文件。
但是当我决定使用相同的代码生成新的密钥对时,它仍然是相同的公钥和私钥(完全相同)
通常不应该是这种情况,我们应该能够生成无限制的不同密钥对,以防私钥因某些原因泄露。
是否还有其他步骤来生成全新的密钥对,或者这是一个错误?
我使用Delphi XE6并运行Lockbox 3组件(最新源自SourceForge)
提前致谢
答案 0 :(得分:1)
在生成之前随机化您的种子。为获得最佳效果,请勿使用内置的随机化程序。
答案 1 :(得分:0)
在uTPLb_Random
方法中,TRandomStream.Randomize
单元中出现键入错误。现在,它已修复(请参见uTPLb_Random.pas on GitHub)。
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;
校正后,每次都会生成不同的密钥。