2011-12-10 44 views
3

我需要爲加密項目生成大素數。我注意到.NET 4.0有一些內置的密碼原語(例如RSA),它使用隨機生成的大素數(p,q代表RSA)。他們是否都使用一個公共的內置庫,這個庫是公開的,並且可以從他們的類範圍之外訪問,或者我必須使用外部庫(我知道有簡單的素數測試算法,我只是不想實施比我更多)。有沒有辦法在C#中生成大素數,而不使用外部庫?

+1

素數必須是奇數。 – Corbin

+1

@Corbin - 不是*所有*素數都是奇數(但大數將是) –

+1

我想我很抱歉。但是,不是2是唯一的非奇素數? – Corbin

回答

1

在.NET v4(及更高版本)中,Microsoft提供了一個新程序集System.Numerics.dll,其中包含BigInteger類型。但是它不提供任何方法來檢查素數。

單聲道(自1.0之前)還提供[BigInteger][3]類型位於它的Mono.Security.dll大會。您可以使用,如或將質檢方法(存在多種方法)移植到新的Microsoft BigInteger類型。

他們是否都使用常見的內置庫,它是公共的,可以從它們的類範圍

是的,無論是RSACryptoServiceProviderDSACryptoServiceProvider調用到CryptoAPI的做到這一點的外部訪問。然而,CAPI不公開它自己的BigInteger代碼(甚至是本地代碼),所以它不會幫助你。

1

在您需要的範圍內生成一個大數字。測試它是否爲素數。如果不是,拒絕並重復。

對於測試,只需使用1500以上的質數進行試驗,然後切換到Miller-Rabin。通過正確實施Miller-Rabin,硬件故障的可能性大於錯誤地將複合材料標記爲主要。

相關問題