2016-08-14 55 views
2
CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator(); 
SecureRandom secureRandom = new SecureRandom(randomGenerator); 

private void m () { 
    KeyGenerationParameters keyGenerationParameters = new KeyGenerationParameters(secureRandom, a); 

    RsaKeyPairGenerator keyPairGenerator = new RsaKeyPairGenerator(); 
    keyPairGenerator.Init(keyGenerationParameters); 
    a_method(keyPairGenerator.GenerateKeyPair()); 
} 

爲什麼下面的代碼生成時調用了兩次相同的密鑰,但是當程序重新啓動它生成不同的密鑰?同一運行上生成相同的運行不同的密鑰 - RsaKeyPairGenerator C#BouncyCastle的

實施例(相同實例,但不同的時間稱爲米()):

公共密鑰A:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhSUzd + 38BxgCossYWUouldfKC + lKZuM2uymuz1ERebhQVYHtwBQT0T2yb07ksZgX5BeWThl3nzdNLdEOEztPj6lDxMb + jamrmInJE94t5xGIrN3dZSIKiVdfe4iztBLTMKH8V9s8rJIMGWAbr7ytBsGC1dOTluMnINhxpXGZIXQIDAQAB

公鑰乙:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhSUzd + 38BxgCossYWUouldfKC + lKZuM2uymuz1ERebhQVYHtwBQT0T2yb07ksZgX5BeWThl3nzdNLdEOEztPj6lDxMb + jamrmInJE94t5xGIrN3dZSIKiVdfe4iztBLTMKH8V9s8rJIMGWAbr7ytBsGC1dOTluMnINhxpXGZIXQIDAQAB

+0

這兩個公鑰是相等的。我不確定你想問什麼。 –

+0

對不起,它不清楚,但這些鍵是在程序的同一個實例上生成的,但預計會不同,它們是相同的,爲什麼? – Keddy1201

+1

「SecureRandom」類的實現在哪裏? –

回答

0

僅根據您的代碼段的隨機數是一個全球性的。這意味着它在啓動時初始化,然後保持不變。所以你每次都會向密鑰生成器提供相同的隨機數。快速修復是將函數m()上方的兩行移動到函數中。

+0

SecureRandom生成一個數字,它不是一個數字。 – Keddy1201

相關問題