私は、非対称キーを使用してデータを暗号化および復号化するための小さなソフトウェアを作成しています。制限された指数のためにC#で非対称キーを作成するにはどうすればいいですか?
問題は、私はC#でも、私が使用している場合コーディングしています、次のとおりです。
BigInteger.Pow(BigIntenger myNumber, int myExponent);
指数は「int型」であると、私の値がintのために大きなにあります。
すぐに説明して間違いがないことを確認するには、大きな数字を使用して秘密キーを持たずに解読を難しくする必要があります。
だから私は
- N = P * Q
- PとQは両方の素数ています。
- M =(P-1)+(Q-1)
- Cは次いで、Uを見つけるM
- と素数である: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
だから私はこれを行うことができます私が小さな "U"値を "int"に適合させるために小さい番号を使う場合に限りますが、安全ではありません。BigIntegerのようなint型ではどうしたらいいですか? BigIntegerの
次のとおりです。https://crypto.stackexchange.com/questions/43272/why-is-writing-your-own-encryption-落胆し、別のもの:https://security.stackexchange.com/questions/18197/why-shouldnt-weroll-our-own –
@PeterB:ある時点で、誰かがライブラリの背後にあるコードを書く必要があります他の人は物事をやり直す必要はありません。だから、私は答えがそれをするのを邪魔しないと言っているとは思わない - この種のことをやりたい理由がたくさんあります - 楽しく、暗号コードを書く経験のために...私は書いていますJPGとMP3の暗号化/復号化のための自分のコード - 私は決してそれをプロダクションコードで使用しませんでしたが、それは楽しいことでした。 – PaulF
手続きについての記述では、_ "各数値は指数CとNの法を乗じなければなりません。" _しかし、表示するコードは数字をCの強さに上げます - どちらが正しいですか?もしあなたが掛け合っているならば、BigIntegerは2つのBigIntegerを一緒に掛け合わせることができます。 – PaulF