Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi LockBox3生成相同的RSA密钥对_Delphi_Cryptography_Key_Rsa_Lockbox 3 - Fatal编程技术网

Delphi LockBox3生成相同的RSA密钥对

Delphi LockBox3生成相同的RSA密钥对,delphi,cryptography,key,rsa,lockbox-3,Delphi,Cryptography,Key,Rsa,Lockbox 3,我最近决定使用LockBox3 crypto组件集,并遵循有关如何使用以下链接生成RSA密钥对的简单文档: (正式文件) 当我应用这个过程时,我能够生成公钥和私钥并导出到文件 但是,当我决定使用相同的代码生成新的密钥对时,它仍然是相同的公钥和私钥(完全相同) 通常情况下不应该是这样,我们应该能够生成无限多个不同的密钥对,以防私钥因某种原因泄漏 是否有其他步骤来生成全部新密钥对,或者这是一个bug 我正在使用Delphi XE6并运行Lockbox 3组件(最新版本可从SourceForge获得

我最近决定使用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;