2

我最近决定遇到 LockBox3 加密组件集,并遵循有关如何使用以下链接生成 RSA 密钥对的简单文档:

http://lockbox.seanbdurkin.id.au/Generate+an+RSA+key

(官方文档)

当我应用该过程时,我能够生成公钥和私钥并导出到文件。

但是当我决定使用相同的代码生成新的密钥对时,它仍然是相同的公钥和私钥(完全相同)

通常情况下不应该这样,我们应该能够生成无限不同的密钥对,以防私钥由于某些原因泄露。

是否有任何其他步骤可以生成全新的密钥对,或者这是一个错误?

我正在使用 Delphi XE6 并运行 Lockbox 3 组件(可从 SourceForge 获得最新版本)

提前致谢

4

2 回答 2

2

在生成之前随机化你的种子。为获得最佳结果,请勿使用内置的随机化程序。

于 2015-10-25T20:34:47.817 回答
0

uTPLb_Random单元、TRandomStream.Randomize方法中出现打字错误。现在它已修复(参见GitHub 上的 uTPLb_Random.pas)。

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;

更正后,它每次都会生成不同的密钥。

于 2019-07-17T08:09:38.890 回答