2012-11-01 46 views
3
int main() 
{ 
    unsigned long long key = 21739827982173982173921739217392173217397213271832193721973291732917321732132173971317382173213782163872163872163872163872163826176728328621321487219372198371298775647326409817402198732198432974329479832749173821732198732173217392173721372193728193782193792173921732171; 
} 

編譯器說我想分配的數字對於所選類型來說太大。我如何存儲這個然後執行操作?存儲和使用300數字整數

+0

使用像'libmp'這樣的多精度庫。 –

回答

6

C沒有任何內置的支持。您需要一個「bignum」庫(也稱爲「任意精度算術」或「多精度算術」庫)。 GNU MP是有據可查的和流行的。

編輯:我只注意到你的變量被命名爲「key」,並且該數字似乎大約爲900比特長。您是否試圖執行RSA?如果是的話,你真的應該使用一個經過充分測試的密碼庫;在RSA實施中可能會出現許多細微的錯誤,這些錯誤會損害您的安全。其中的選項包括gcrypt,NSSOpenSSL。如果您可以與libgcrypt兼容,我強烈建議使用它,這是因爲它的API和文檔比其他兩個更好。

+0

在我的情況下暴力強度RSA模數來證明爲什麼壞鍵不好。 – MxyL

+1

啊。實際上,對於通用bignum庫而言,使用加密庫可能會更容易。 – zwol

1

在大多數情況下(如果不是所有情況下),您都需要一個大整數或任意精度的數學庫。 (C的整數類型很少,如果有的話,可能會有特殊的編譯器發生,但它們並不是主流的,即使你設法找到這樣的編譯器,你的代碼也不會是便攜式的。)

結賬GMP