我正在創建一個小軟件來使用非對稱密鑰來加密和解密數據。如何在C#中創建非對稱密鑰,因爲指數大小有限?
的問題是,我在C#中,即使我使用的編碼:
BigInteger.Pow(BigIntenger myNumber, int myExponent);
指數是一個「Int」和我的價值是很大的一個int。
只是爲了快速解釋並確保我沒有犯任何錯誤,您必須使用大數字,以便在沒有私鑰的情況下解密更加困難。
所以我
- N = P * Q
- P和Q都是素數。
- M =(P-1)+(Q-1)
- C是具有M 一個素數
- 然後用找到U:C×U + M×V = 1
公鑰(N,C)。
私鑰(U,N)。
例如,您要加密:「Bonjour!」以UTF8。
您將有:
B⇔66/o⇔111/n⇔110/j⇔106/o⇔111/u⇔117/r⇔114/(協商)⇔32/⇔33
然後提高每個編號,以C的功率和模N
例:valueOfB =(66^C)%N。
現在您的郵件已加密。
如果要解密,你必須乘以指數u各自的價值和模N
例:(valueOfB^U)%N
所以我能做到這一點只有當我使用小號碼,因爲我會有一個適合於「int」的小U值,但它不是安全的,我怎麼能用BigInteger這樣的大U來實現這一點,而不是int?
你可能想看看這裏:https://crypto.stackexchange.com/questions/43272/why-is-writing-your-own-encryption-不鼓勵,另一個:https://security.stackexchange.com/questions/18197/why-shouldnt-we-roll-our-own –
@PeterB:在某些時候,有人必須寫在代碼庫後面的代碼,這意味着其他人不需要再做一次。所以我不認爲答案只是說不要做這個事情 - 有很多理由想要做這種事情 - 爲了好玩,爲了編寫加密代碼的經驗,......我寫了我自己的JPG和MP3加密/解密代碼 - 我絕對不會在生產代碼中使用它,但這很有趣。 – PaulF
在你寫的程序的描述中_「然後每個數字都必須乘以指數C和模N」,但是你顯示的代碼將數字提高到C的冪 - 哪一個是正確的?如果您正在相乘,那麼BigInteger允許兩個BigInteger相乘。 – PaulF