- 締切済み
RSA暗号?らしいですが...
友達から送られてきた内容をそのまま載せます わかるかたいたら解読お願いします... N(ε)(4)⇒2221000101100020 00213203 00210032011011030102110332030110002100321233 [The key] ps=967521(10) (p(4),s(4) p,s∈ℙ p<s) p(4)=q(10)≡r(10)(mod26)=N(A)(10) s(4)=t(10)≡u(10)(mod26)=N(E)(10) *α(4)=β(10)≡γ(10)(mod26)=δ(10)(mod26)=N(γth alphabet)=N(ε) (0≦γ≦25) If:γ(10)∈Px(10)⇒δ(10)=γ(10)+26n(10) (n∈ℕ) (Px:”x”th prime number) *#Digit[N(ε)(4)]=4 [The key]は鍵、つまり暗号の鍵という意味です ℙは素数全体、ℕは自然数全体をそれぞれ意味します *のついた行は注釈ですIf: は条件を表します Digitを和訳すると「桁」です n(4)はnが4進数であること、n(10)はnが10進数であることを表しています
- みんなの回答 (1)
- 専門家の回答
みんなの回答
![noname#250643](https://gazo.okwave.jp/okwave/images/contents/av_nophoto_100_6.gif)
関連するQ&A
- RSAのdはどう求める?
素数p = 3、q = 5 公開鍵N = pq = 15 公開鍵e=7 とした場合 d = 1/e mod(p-1)(q-1) となるそうですが、このdはどうやって求めるのでしょうか。
- 締切済み
- 情報工学
- RSAのプログラミング
卒論でRSAをC++でプログラミングしています。 最初に選ぶ大きな素数p、qにより法鍵Nを作るとしたとき、p、qはどれくらい大きな数でなければなりませんか? また、公開鍵は素数である必要はありますか?指数鍵もどのくらい大きな数である必要がありますか。 (p、q、公開鍵を一桁代の数字で計算すると、秘密鍵がマイナスにあるときがあったので) また、「こんな暗号技術もC++で作ってみたら?」というのがあれば教えてください。
- 締切済み
- ネットワーク
- RSA暗号についての素朴な疑問
RSA暗号について勉強中のものですが、これまでのところ (1)送信側はは公開鍵(e,n)で平文aを b = a^e mod n で暗号文bを作成する。 (2)受信側は秘密鍵dを知っており、上記暗号文bからb^d mod n で元の平文aが求まる。 (3)暗号としてのキモは、(e,n)からでは復号できない。dを求めることも困難(nの素因数分解が困難) というのが私の理解したところです。数式等もある程度理解しました。 ただ、ここで素朴な疑問があります。dをしらなくてもbのべき乗を繰り返していけば復号できるのでは?ということです。自分が送信側で平文aを暗号化してbを作る。bから bxb→b' b'xb→b'' b''xb→b''' と計算していけば平文aにたどり着くのでは? (その結果dもわかったことになる) 平文が現れたかのチェック時間は余分にかかると思いますが、dを知っていてbのd乗を計算するのと上記のように2乗、3乗...と繰り返すのと大きな違いがあるのでしょうか? 長文ですいません。
- ベストアンサー
- ネットワーク
- n進数を10進数に変換するプログラムがわかりません
整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム 関数void base2dec(int n, string digits, int &dec)を使用する 実行例 110101(2)=53 123(8)=83 7ACE(16)=31438 以下はとりあえずつくったみたプログラムです #include<iostream> #include<string> using namespace std; void base2dec(int n, string digits, int &dec) { int i,x=0; for(i=0; i=digits.size()-1; i++) { if(n<10) { x=digits[i]-'0'; } else { x=digits[i]-'A'+10; } dec=(x*n); if(cin >> digits[i++]) { if(n<10) { dec=dec+(digits[i++]-'0'); } else { dec=dec+(digits[i++]-'A'+10); } } } int value = dec; } int main() { int n,value; string digits; cout << "何進数ですか-->"; cin >>n; cout << "数字列を入力してください-->"; cin >>digits;; base2dec(n,digits,value); cout << digits << "(" << n << ")=" << value << endl; return 0; } void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。
- ベストアンサー
- C・C++・C#
- 素数の集合をmod pで分類すると
素数の集合P={2,3,5,7,11,13,…} に対し、素数pをひとつとります。 p以外の素数をpで割った余りは、 1, 2, …, p - 1 となりますが、それらは同じ程度存在するのでしょうか? つまり、n個の素数の集合を P(n)={2,3,5,7,11,13,…,p_n} (ただし、p_nはn番目の素数) とし、 n→∞のとき、 ♯{q∈P(n)|q≡1 (mod p)}/n → 1/(p-1) ♯{q∈P(n)|q≡2 (mod p)}/n → 1/(p-1) … ♯{q∈P(n)|q≡p-1 (mod p)}/n → 1/(p-1) は成り立つのでしょうか。
- 締切済み
- 数学・算数
- 素数の分類に関して
[類題] 「8n + 3 型の素数は無限に多くある事を示せ。」の略解。 *)文中のp^は複素数pの共役な複素数です。例えば、p=1+iの場合、p^は1-iのことです。 また、a2 はaの二乗という意味です。 証明)もし 8n + 3 型の素数が有限個であったとし、その全体を p1, p2, ... , pn とする。 P = p1p2 ... pn + √2 i と置いて、これを単項イデアル整域 Z[√2 i ] で素元分解する。 N (P) = PP^ は奇数であるから(正確には、 N (P) ≡ 3 ( mod. 8 ) 、) P の有理整数の素因数は奇数である。この因子は PP^ の中では偶数冪で出てくるから、その部分は 8n + 1 型である。又、 P は有理整数に同伴でないから、a + b √2 i 型 (b ≠ 0, 有理整数の素因子と同伴でない物) の因子がある。PP^ は奇数であるから a は奇数である。更に、この a + b √2 i 型の因子の b が偶数であるとすると、 N( a + b √2 i ) = a2 + 2b2 ≡ 1 (mod. 8) であるから、 この形の b が全て偶数であるとすると PP^ ≡ 3 (mod. 8) と矛盾する。従って b が奇数の物 a + b √2 i が有るが、素元分解の一意性により、N( a + b √2 i ) = a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8) となり有限性に矛盾。故にこの型の素数は無限個。 この証明における、この因子は PP^ の中では偶数冪で出てくるから、その部分は 8n + 1 型である。がなぜ言えるのかという点と 最後の一文である 素元分解の一意性により、N( a + b √2 i ) = a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8) となり有限性に矛盾。 における a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8)がなぜ分かるのかが理解できません。 よろしくお願いします。
- ベストアンサー
- 数学・算数