830 :
向こうから:03/03/30 17:34
n=21
e=11
晒す
831 :
向こうから ◆tr.t4dJfuU :03/03/30 17:39
cを晒しておいてください
もうすぐ出かけるので 続きは 夜 に なるかもしれません
832 :
名無しさん@お腹いっぱい。:03/03/30 17:42
833 :
向こうから ◆tr.t4dJfuU :03/03/30 23:02
c^d
これが、
9^47 なんですが、
7.06965049015105E+44
で、
706965049015105000000000000000000000000000000
こうなるんですが、
上の指数表現の段階で、端数が切られて正しい計算が出来ません。
これを 21 で 割った 余り を 求めたいんですが、エクセルでは 出来ません
お付き合いありがとう ございました。
暗号が解きたいのではなく
どんな仕組みになっているのか興味がありましたが、
もう だめです・・・・
834 :
向こうから ◆tr.t4dJfuU :03/03/30 23:05
=MOD(9^47,21)
=MOD((9^47),21)
いずれも、エラーです・・・
MOD( a^2 , b ) == MOD( a * MOD(a,b) ,b )
MOD( a^3 , b ) == MOD( a * MOD(a^2,b) ,b )
MOD( a^n , b ) == MOD( a * MOD(a^(n-1),b) ,b )
836 :
向こうから ◆tr.t4dJfuU :03/03/30 23:34
ん?
837 :
向こうから ◆tr.t4dJfuU :03/03/30 23:38
=MOD(9*MOD(9^46,21),21)
=MOD(9*MOD(9^(47-1),21),21)
いずれも エラー でした・・・
839 :
向こうから ◆tr.t4dJfuU :03/03/30 23:42
エクセルのVBAは 使えるのですが・・
ちょっと このへんで 無理そうです・・・
なんやねん(w
842 :
向こうから ◆tr.t4dJfuU :03/03/31 00:35
だって、エクセル使ってるいじょう
9^47 が計算できんかったら むりじゃないかと・・
VBAでどうしろと?
アルゴリズム か フロー で 示してくれたら できるかも・・
でも まぁ このへんで
ありがとございました
843 :
向こうから ◆tr.t4dJfuU :03/03/31 00:39
ちらっと 合同式みました・・
ムズイです・・
A=1
FOR I=1 TO 47
A=(A*9)MOD 47
NEXT
PRINT A
A=1
FOR I=1 TO 47
A=(A*9)MOD 21
NEXT
PRINT A
#include <stdio.h>
int my_func(int a,int b,int c);
int my_func(a,b,c)
{
int r;
int i;
r=1;
for(i=0;i<b;i++)
{
r=(r*a)%c;
}
return r;
}
int main(void)
{
int a;
a=my_func(9,47,21);
printf("%d\n",a);
return 0;
}
847 :
向こうから ◆tr.t4dJfuU :03/03/31 01:21
ん!
Cは使えないので
VBAでやってみます!
明日から仕事なんで、近日中に・・・
848 :
向こうから ◆tr.t4dJfuU :03/03/31 19:50
現在
Public Function ABEKIBMODC(入力A, 入力B, 入力C) As Variant
Debug.Print "開始ーーーーーーー"
Dim A, B, C
Dim I, X, Y
A = 入力A: B = 入力B: C = 入力C
X = 1
For I = 1 To B
X = X + (X * A) Mod C
Debug.Print I, X
Next I
Debug.Print "余り=", X
Y = Hex$(X)
Debug.Print "16進表記", Y
ABEKIBMODC = X
End Function
849 :
向こうから ◆tr.t4dJfuU :03/03/31 19:53
デバクウインドのコピー
開始ーーーーーーー
1 10
2 16
3 34
4 46
5 61
6 64
7 73
8 79
省略
45 475
46 487
47 502
余り= 502
16進表記 1F6
00 00 00 00 00 01 F6
と解して、
アスキーコードにすれば いいのかな?
ちょっと 出かけてくるので また よる
850 :
向こうから ◆tr.t4dJfuU :03/03/31 19:54
>>845 ちなみに
3行目は 勝手に
A=A+(・・・・・
と 解釈したんですが?????
>>849 × X = X + (X * A) Mod C
○ X = (X * A) Mod C
○ X = MOD( X * A , C )
#! /usr/bin/env perl
$a=9 ;
$b=47 ;
$c=21 ;
$t=1 ;
for ( $i = 0 ; $i < $b ; $i++ ) {
$t=($t * $a) % $c;
};
print "$t\n";
#include <stdio.h>
int aaaa(int a,int x,int p);
int aaaa(int a,int x,int p) {
auto int r;
if(0!=x) {
if((x%2)!=0) {
r=(a*aaaa((a*a)%p,(x-1)/2,p))%p;
}
else {
r=(aaaa((a*a)%p,x/2,p))%p;
}
}
else {
r=1;
}
return r;
}
int main(void) {
auto int a,x,p ,r;
a=9;
x=47;
p=21;
if((x<0)||(p<1)) exit(2);
r=aaaa(a,x,p);
printf("%d\n",r);
return 0;
}
854 :
向こうから ◆tr.t4dJfuU :03/03/31 21:14
なんか 勘違いしてるのかなぁ・・
とりあえず 直しました
Public Function ABEKIBMODC(入力A, 入力B, 入力C) As Variant
Debug.Print "開始ーーーーーーー"
Dim A, B, C
Dim I, X, Y
A = 入力A: B = 入力B: C = 入力C
X = 1
For I = 1 To B
X = (X * A) Mod C
Debug.Print I, X
Next I
Debug.Print "余り=", X
Y = Hex$(X)
Debug.Print "16進表記", Y
ABEKIBMODC = X
End Function
855 :
向こうから ◆tr.t4dJfuU :03/03/31 21:16
でばぐういんど
開始ーーーーーーー
1 9
2 18
3 15
4 9
5 18
略
44 18
45 15
46 9
47 18
余り= 18
16進表記 12
当たり前ですが、47回目の演算の余りを 答えとしているので、ループさせた意味が
分からないのですが?
これだけじゃ だめなのかな?
856 :
向こうから ◆tr.t4dJfuU :03/03/31 21:18
A=9
B=47
c=21
が 代入されてます
=ABEKIBMODC(9,47,21)
こんな関数になってます。
857 :
向こうから ◆tr.t4dJfuU :03/03/31 21:19
858 :
向こうから ◆tr.t4dJfuU :03/03/31 21:25
>>853 うーん・・・
わかりません
たとえば
if((x<0)||(p<1)) exit(2);
は、
IF X<0 OR P<1 THEN return
か
IF X<0 AND P<1 THEN return
なのかも、はたまた もっと違うのかも わかりません
BASIC風だと わかるのですが・・・
859 :
向こうから ◆tr.t4dJfuU :03/03/31 21:30
>>853 int aaaa(int a,int x,int p);
ここらへんは・・・
ユーザー定義型
Type ステートメントを使って、異なるデータ型を組み合わせた独自のデータ型を作成できます。ユーザー定義型には 1 つまたは複数のデータ型の要素、配列、または事前に定義したユーザー定義型を格納することができます。次に例を示します。
Type aaaa
a As As Integer ' 整数型変数
x As As Integer ' 整数型変数
p As As Integer ' 整数型変数
End Type
なのか??? わかりません。。。
a,b は0以上の整数
p は自然数
( a + b ) mod p == ( ( a mod p ) + ( b mod p ) ) mod p
( a * b ) mod p == ( ( a mod p ) * ( b mod p ) ) mod p
a mod p == ( a + b*p ) mod p
-----BEGIN PGP MESSAGE-----
Version: 6.5.8ckt
qANQR1DBjgPWp+EIWSWCcxAB/3tw9qlJERkDAJgmOUogIBPhU8aM1AR7Ifb9Ne7V
zK0BjnP/PzcMpQLS16nLmQBu7m3HCWfgndGcgUej9sUA16AB/0Ai5snlu3UuEgtU
wIEvEgmMseCLrfu4OEogWWX8cG3+IxnReQarW0sGihUV0TBs/ulkRtbZvpb5HbIc
3i7oK+3Jc9OlkW4kVm/yAWx4VzFzr6lQp1R7tpyTQMM9NZev6A+tMaiw6EnoVKfI
ZWsFbvv9SSdqpMxN/Uoq8r2ChmmBAtz9x8jVeahZeQf6Nq5Gz/CBh3m3hyS4Z7Ks
heLrmU1qhmxOkAOk9Yfd+9ldDd2c9MKLYQI=
=mSQu
-----END PGP MESSAGE-----
862 :
向こうから ◆tr.t4dJfuU :03/03/31 21:58
えっと目的は =MOD((9^47),21) で・・・・
書き換えると
(9^47) MOD 21 で・・・
これ「( a * b ) mod p == ( ( a mod p ) * ( b mod p ) ) mod p 」にあてはめると
(9*47)mod21 = ((9 mod 21)*(47 mod 21)) mod 21 で・・・
関数表現では =mod(mod(9,21)*mod(47,21),21) かな・・
とりあえずエクセルに入れたら、「3」がでました・・
で・・ いいのかな・・
16進でも 3は 3で
00 00 00 00 00 00 00 03
のなか?
でも ASCIIコードに 00 も 03 も 文字は 割り当てられてないです・・
それに
これと>( a + b ) mod p == ( ( a mod p ) + ( b mod p ) ) mod p
これ>a mod p == ( a + b*p ) mod p
を使ってないので
まだまだ だめなんでしょうか・・・
863 :
向こうから ◆tr.t4dJfuU :03/03/31 22:08
もしかして ここのスレは私語禁止ですか?(w
暗号で 話してるんですか?
a^0 == 1
a^1 == a
a^2 == a*a
a^3 == a*a*a
a^4 == a*a*a*a
a^5 == a*a*a*a*a
a^n == (a^(n-1))*a
a^(n+1) == (a^n)*a
2^2 == 4
10^3 == 1000
9^2 == 81
865 :
向こうから ◆tr.t4dJfuU :03/03/31 22:22
ん?
9^47=(9^(47-1))*9
はい
わかります
その次も
9^48=(9^47)*9
はい・・ で・・・
あ〜
なんか 頭わるいみたい
こんなのもOKですか?
9^47=(9^10)*(9^10)*(9^10)*(9^10)*(9^7)
でも・・・ 意味ないか・・・
866 :
向こうから ◆tr.t4dJfuU :03/03/31 22:26
9^10=3486784401
で計算できたけど・・・
=MOD((((9^10)*(9^10)*(9^10)*(9^10)*(9^7))),21)
こーすると エラーだし・・・
( 9 ^ 47 ) mod 21
== ( ( ( 9 ^ 46 ) mod 21 ) * 9 ) mod 21
== ( ( ( ( ( 9 ^ 45 ) mod 21 ) * 9 ) mod 21 ) * 9 ) mod 21
== ( ( ( ( ( ( ( 9 ^ 44 ) mod 21 ) * 9 ) mod 21 ) * 9 ) mod 21 ) * 9 ) mod 21
中略
== 18
868 :
向こうから ◆tr.t4dJfuU :03/03/31 22:32
さっきの
あまりを 積算した 502 から
502 mod 21 = 19
19は 16進で 13
でも &H13でも 文字はないなぁ・・
( 9 ^ 2 ) mod 21 == 18
( 9^3 ) mod 21
== ( (9^2) * 9 ) mod 21
== ( ( ( 9^2 ) mod 21 ) * ( 9 mod 21 ) ) mod 21
== ( 18 * 9 ) mod 21
== 15
( 9^4 ) mod 21
== ( (9^3) * 9 ) mod 21
== ( ( ( 9^3 ) mod 21 ) * ( 9 mod 21 ) ) mod 21
== ( 15 * 9 ) mod 21
== 9
( 9^5 ) mod 21
== ( (9^4) * 9 ) mod 21
== ( ( ( 9^4 ) mod 21 ) * ( 9 mod 21 ) ) mod 21
== ( 9 * 9 ) mod 21
== 18
以下同様に ( 9^47 ) mod 21 まで続ける。
870 :
向こうから ◆tr.t4dJfuU :03/03/31 22:52
ん・・
一番したは、
(((・・・(((9^1)mod21)*9)mod21)*9)・・・・mod21)*9)
になってるはずだから・・・
X=(9^1)mod21
for I=1 to 47-1
X=X*(Xmod21)*9)
ありゃ・・
(9^1)mod21 に mod21)*9) を 47(か46) 回 掛け合わせるればいいと・・
ここに再帰が 使われる? のか・・・ な・・
いや・・ これでいいのかな?
ちょっと 実験してきます・・・
871 :
向こうから ◆tr.t4dJfuU :03/03/31 23:02
>>869 == ( ( ( 9^46 ) mod 21 ) * ( 9 mod 21 ) ) mod 21
で ↑
ここの(9^46)で オーバーフローする
だめだ・・・
再帰を つかうのか????
こんがらかって どうどうめぐり
872 :
向こうから ◆tr.t4dJfuU :03/03/31 23:09
ん
(9^1)mod21 に
* 9 ) mod 21
を
47回 掛けるのか・・
X=(9^1)mod21
DIM Y
for I=1 to 47
Y=X*9
X=Y mod 21
next
かな・・
873 :
向こうから ◆tr.t4dJfuU :03/03/31 23:16
Dim A, B, C
Dim I, X, Y
A = 入力A: B = 入力B: C = 入力C
'A=9 B=47 C=21
Y = 0
X = A ^ 1 Mod C
Y = X
For I = 1 To B
Y = Y * 9
X = Y Mod C
Debug.Print I, X
Next I
Debug.Print "余り=", X
ABEKIBMODC = X
End Function
874 :
向こうから ◆tr.t4dJfuU :03/03/31 23:18
でばぐういんjんど
開始ーーーーーーー
1 18
2 15
3 9
4 18
5 15
6 9
7 18
8 15
ここで エラー
>>869 の 答えと 一致(偶然かも)
でも 9回目の ループ で 止まった・・・
なんで
875 :
向こうから ◆tr.t4dJfuU :03/03/31 23:21
開始ーーーーーーー
I Y X = 1 81 18
I Y X = 2 729 15
I Y X = 3 6561 9
I Y X = 4 59049 18
I Y X = 5 531441 15
I Y X = 6 4782969 9
I Y X = 7 43046721 18
I Y X = 8 387420489 15
原因
Yの値が オーバーフロー
馬鹿です 自分
やっぱ 再帰 かな・・
わからん
876 :
向こうから ◆tr.t4dJfuU :03/03/31 23:27
べき余り
218
315
49
518
略
439
4418
4515
469
4718 <<<<
余りは 規則的に繰り返す
でも ・・・
プログラムで やったわけじゃない
エクセルで縦に並べた
878 :
向こうから ◆tr.t4dJfuU :03/03/31 23:28
べき余り
2-18
3-15
4-9
43-9
44-18
45-15
46-9
47-18
879 :
向こうから ◆tr.t4dJfuU :03/03/31 23:30
結局分かりませんでしたが
ありがとう ございました
18でも 文字コードないですよな・・・
880 :
向こうから ◆tr.t4dJfuU :03/03/31 23:36
>>877 これは 漏れに対しての メッセージですか?
ありがとう
ございます
>>873 × X = A ^ 1 Mod C
○ X = A ^ 0 Mod C
× Y = Y * 9
○ Y = X * 9
882 :
向こうから ◆tr.t4dJfuU :03/03/31 23:48
Option Explicit
Public Function ABEKIBMODC(入力A, 入力B, 入力C) As Variant
Debug.Print "開始ーーーーーーー"
Dim A, B, C
Dim I, X, Y
A = 入力A: B = 入力B: C = 入力C
'A=9 B=47 C=21
Y = 0
X = A ^ 0 Mod C
Y = X
For I = 1 To B
Y = X * 9
X = Y Mod C
Debug.Print "I Y X ="; I, Y, X
Next I
Debug.Print "余り=", X
ABEKIBMODC = X
End Function
883 :
向こうから ◆tr.t4dJfuU :03/03/31 23:49
開始ーーーーーーー
I Y X = 1 9 9
I Y X = 2 81 18
I Y X = 3 162 15
I Y X = 4 135 9
I Y X = 5 81 18
略
I Y X = 43 135 9
I Y X = 44 81 18
I Y X = 45 162 15
I Y X = 46 135 9
I Y X = 47 81 18
余り= 18
でました!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
ところで
向こうって何処?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
iD8DBQE+iFVgAPsqAp/UiEgRAgzAAKDmiCW/qNlnG6vqd4EM9vfi/zgegQCfcH0m
GXgaE1WoFQeb1hoGp7vUBhQ=
=yPwa
-----END PGP SIGNATURE-----
885 :
向こうから ◆tr.t4dJfuU :03/03/31 23:56
あれ? 漏れを ここに 誘導してくれた
人じゃ ないんですか?
他のスレでPGPって暗号が 簡単に 使えると 紹介が あって、
漏れが興味を持ったのですが・・
そのほかのスレでは、スレチガイ! の お叱りが あって
暗号解読の続きを ここで やってたんです
886 :
向こうから ◆tr.t4dJfuU :03/04/01 00:19
18で いいんですか??
887 :
名無しさん@お腹いっぱい。:03/04/01 00:23
あってる!
これを応用してeとnとdの値を大きくすると
伝えたい数字=mを大きくする事が出来るのです
n=210682641866528392339924267919521486832254575626011849551005435185793837676391
952488587737546451362177622385218482600517540050364571844864529848980677135592
71048127665947018785888345270242137737997411
e=5
dは秘密鍵だから公開しては駄目
888 :
名無しさん@お腹いっぱい。:03/04/01 00:32
送る側は
c=Mod(m^e,n)を出して
c=698554217608521722285159656025858094842043344042897409638522493078199478097402
453624389362145671555027608884321004068910953767391333601595127856237419999890
2499
=
7f32d8993f8fdbeeddf283513ebc3cf6c163b804690a7ca90387970f8d4cdbcfb66bec39dc37f
25b1f8c92a20edebe3e3df0d5dbdb20d52231535af0c2e25efbf70e3
を送る
889 :
向こうから ◆tr.t4dJfuU :03/04/01 00:41
>>887 来てくれたんですね ありがとです
でも・・
そんな 桁 エクセルでは 無理 ですね・・・
でも ありがとう ございました
m^eをnで割った余りをcとし、このスレで晒す
mが1234
として
1234^5 mod 2106・・・・・7411
もう 1234^5で フローします
それに、nの100桁とか 入らない。。
でも 頭の体操になりました
890 :
名無しさん@お腹いっぱい。:03/04/01 00:42
受け取った側は
m'=Mod(c^d,n)
=93076495688256089536609610280499
=496ca60b7bb3f3690289336ae33
を出して
(下位)8バイトを文字列に直して
キーを受け取る
891 :
名無しさん@お腹いっぱい。:03/04/01 00:44
>>889 どうにかして桁を増やす方法ないかな?
上の方の応用で出来ると思う
892 :
名無しさん@お腹いっぱい。:03/04/01 00:45
893 :
向こうから ◆tr.t4dJfuU :03/04/01 00:54
桁は そんな 100桁とかは 無理かと・・・
応用できる 頭は ありません
もしかしたら 10文字くらいの ミニPGPくらいなら できるかも(w
>PGP使えば?
暗号がやりたいんではなく
暗号の作成と解読の仕組みに興味を 持ったので・・
自分で(手計算かVBA)やってみたかったのです。
894 :
向こうから ◆tr.t4dJfuU :03/04/01 00:56
風呂も入らず
メシもくわずやってたので 疲れました(w
895 :
名無しさん@お腹いっぱい。:03/04/01 00:59
>>893 小さめのnとeとdを作ってnとeを晒してみて
896 :
名無しさん@お腹いっぱい。:03/04/01 01:00
897 :
向こうから ◆tr.t4dJfuU :03/04/01 01:01
>>895 では、近日中にやります
明日 仕事なもんで・・
こんど晒しておきますから また 遊んでください
898 :
bloom:03/04/01 01:01
899 :
名無しさん@お腹いっぱい。:03/04/01 01:05
>>897 乙〜
pとqがバレるとnとeから誰でもdが出せてしまう
pとqを見つけるにはnを因数分解するしかない
nを大きくしなきゃいけない理由は
容易に因数分解出来てしまうから
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.2.1 (GNU/Linux)
jA0EAgMBudCOxORtJM9gpCTQF9tuStvI2eyRIC5AhZJk1QWDqlT1e0uPFODI77C+
wmNVw7k=
=0/gF
-----END PGP MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
\ │ /
/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< PGPPGP!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< PGPPGP!
PGP〜〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
 ̄
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
iEYEARECAAYFAj6JgzoACgkQAPsqAp/UiEiLcACgk/FWFcu3CCoAyD/HmjY71lPB
iP4AoKCZUW6fT/iDlpq+lA/t7Qkk7iuI
=VJR4
-----END PGP SIGNATURE-----
902 :
向こうから ◆tr.t4dJfuU :03/04/01 23:27
おじゃまします
P=17
q=23
として、
n=p*q=17*23=391
s=(p−1)*(q−1)=16*22=352
で・・
>1 大きな素数(100桁くらい)を2つ作りp,qとする
>2 n=p*qとし、s=(p-1)(q-1)と互いに素(公約数が無い)なeを決める
この eを決めるところが、文章から理解できません。
903 :
名無しさん@お腹いっぱい。:03/04/01 23:31
>>902 352を2で割ってみると割り切れてしまう→×
352を3で割ってみると割り切れない→e=3
こうやってeを決めます
904 :
向こうから ◆tr.t4dJfuU :03/04/01 23:37
>>903 eは、尚且つ 素数で、
任意の数で いいんですね。
順番に2、3、5、7 ・・・
と 割っていって、割れなかった一番初めの素数である 必要はないですね?
では e=109
109は素数 で、352を割れない
905 :
名無しさん@お腹いっぱい。:03/04/01 23:41
>>904 オッケーです
でも
c=Mod(m^e,n)を出す時にeが小さい方が都合がいいですよね
そのかわりdが大きくなってしまうわけですが
906 :
向こうから ◆tr.t4dJfuU :03/04/01 23:45
すみません・・・
もうちょっと検討します・・
なにかというと、
eが小さい方がいいのですが・・・
d*109 が 352 の倍数+1 に なるところの 計算が 浮かばない
なんか ヒントいただけると うれしい
ちなみに素数を吐き出す 関数を作ってました
907 :
向こうから ◆tr.t4dJfuU :03/04/01 23:47
Public Function SOSUU(欲しい個数)
Debug.Print "素数の検索 開始ーーーーーーーーーーーーーー"
'欲しい個数分の素数を検索する
Dim 素数格納配列上限
Dim 素数配列()
素数格納配列上限 = 欲しい個数
Debug.Print "素数格納配列上限", 素数格納配列上限
ReDim 素数配列(素数格納配列上限)
素数配列(1) = 2 '素数の2は入れておく
素数配列(2) = 3 '素数3も入れておく
Dim 今の個数, 検索対象, 判定, i, j, k
今の個数 = 2
908 :
向こうから ◆tr.t4dJfuU :03/04/01 23:47
検索対象 = 5 '5から検索開始
For 検索対象 = 5 To 999999999 Step 2
判定 = "素数です"
For j = 3 To 検索対象 - 1
If 検索対象 Mod j = 0 Then
'割れたら素数ではない
判定 = "ダメ"
Exit For
End If
Debug.Print 検索対象; "/"; j; 判定
Next j
If 判定 = "素数です" Then
今の個数 = 今の個数 + 1
素数配列(今の個数) = 検索対象
If 今の個数 = 素数格納配列上限 Then
Exit For
End If
End If
Next 検索対象
909 :
向こうから ◆tr.t4dJfuU :03/04/01 23:48
Debug.Print "結果出力"
For k = 1 To 素数格納配列上限
'
Debug.Print k; "個目は、"; 素数配列(k)
Next
Debug.Print "以上"; 素数格納配列上限; "個の検索終了)"
SOSUU = "完了"
End Function
910 :
向こうから ◆tr.t4dJfuU :03/04/01 23:49
結果出力
1 個目は、 2
2 個目は、 3
3 個目は、 5
4 個目は、 7
5 個目は、 11
6 個目は、 13
7 個目は、 17
略
22 個目は、 79
23 個目は、 83
24 個目は、 89
25 個目は、 97
26 個目は、 101
27 個目は、 103
28 個目は、 107
29 個目は、 109
30 個目は、 113
以上 30 個の検索終了)
多分 いいと おもいます
911 :
名無しさん@お腹いっぱい。:03/04/02 00:00
>>906 #include<stdio.h>
main()
{
int k,i;
for(i=1;i<352;i++){
if((i*352+1)%109==0) {i=352;k=(i*352+1)/109;}
}
printf("%d\n",k);
}
cですがこんな感じです
912 :
向こうから ◆tr.t4dJfuU :03/04/02 00:13
>>911 ん?
わかりそうで わかりません 構文の意味からして・・・
こんなんは どうですか?
for i=1 to 352
if (i*109) mod 352 =1 then
print i
endif
next
すみません 今日はこのへんまでに しておきます
また、暗号で話してるかたには スレ消費して すみません。
913 :
名無しさん@お腹いっぱい。:03/04/02 00:22
>>912 それだとdが見つからないです
なぜならeが小さい場合dは大抵大きな数になるからです
くり返しが多くなってしまい効率が悪くなります
その構文で書くならば
for i=1 to 352
if (i*352+1) mod 109 = 0 then
print i
endif
next
にした方がいいです
914 :
名無しさん@お腹いっぱい。:03/04/02 00:35
>>913 訂正です
for i=1 to 352
if (i*352+1) mod 109 = 0 then
print (i*352+1)/109
endif
next
915 :
向こうから ◆tr.t4dJfuU :03/04/02 00:38
>>913 んんん???
(i*352+1) mod 109 = 0 と
(i*109) mod 352 =1 は
同じなんですか?
違うんですか?
言葉で 現すと どんな感じでしょう?
ちょっと 風呂はいります・・・ 悩む(w
916 :
向こうから ◆tr.t4dJfuU :03/04/02 00:40
>>914 よけい こんらんです(w
風呂いきます
917 :
名無しさん@お腹いっぱい。:03/04/02 00:43
>>915-916 こう考えてみてください
s=2898443842392832878
e=5
の場合どちらの方が効率がいいのかわかると思います
918 :
向こうから ◆tr.t4dJfuU :03/04/02 00:51
>>917 えっと、
意味がしりたいのです
漏れのは、そのまま
i*109 を 352 で 割った 余りが 1 に なった時の i を 見つける
(繰り返しの上限は 352回では 足りないかもしれないけど)
意味か・・
もしくは
両辺を109 で 割って・・
両辺から1引いて・・
・・・・
みたいに、その判定式で i(dのこと)が導き出せる 確信が欲しいんです。
教えられた判定式を 意味も分からず 使うのは イヤなんです。
(すみません 生意気で)
暗号がやりたいのではなく、仕組に興味があるんです。。。
919 :
向こうから ◆tr.t4dJfuU :03/04/02 01:13
920 :
名無しさん@お腹いっぱい。:03/04/02 01:18
>>918 a*b MOD c = 1 ‥‥‥(1)
⇒
∃a' s.t. (a'*c+1) MOD b = 0
∵
(1)より
a*b - 1 = a'*c
⇔
a*b = a'*c + 1
⇔
a = (a'*c + 1) ÷ b
∴(a'*c+1) MOD b = 0
921 :
名無しさん@お腹いっぱい。:03/04/02 01:21
>>918 >>912は
i*109 を 352 で 割った 余りが 1 に なった時の i を 見つける
です
>>914は
j*352+1 を 109 で 割った 余りが 0 に なった時の j を 見つける
[ちなみに i = (j*352+1)/9]
です
922 :
名無しさん@お腹いっぱい。:03/04/02 01:31
訂正
[ちなみに i = (j*352+1)/9] → [ちなみに i = (j*352+1)/109]
>>902 RSAの話なら、
s=(p-1)*(q-l)
ではなくて
s=LCM(p-1,q-1)
ではないのでつか?
924 :
向こうから ◆tr.t4dJfuU :03/04/02 01:42
>>920 なんとなく ・・・ でもないか・・・ むずいです・・
できたら 「∃a' s.t. 」の意味を 教えてください
自分で考えてたのは・・
d*109 が、 352の?倍 より 1少ない
↓
d*109+1 = 352の?倍
↓
行き詰まる・・・
もう少し
>>920 を 考え(理解)させてください・・
今日は寝ます・・
925 :
向こうから ◆tr.t4dJfuU :03/04/02 01:43
926 :
名無しさん@お腹いっぱい。:03/04/02 01:59
>>923 それでも合ってますね
s=φ(n)を求める方式しか知りませんでした
AI=1234
BI=4567
IF B>A
THEN
A=BI
B=AI
ELSE
A=AI
B=BI
ENDIF
WHILE (A MOD B) != 0
X=A MOD B
A=B
B=X
ENDWHILE
IF B==1
THEN
PRINT AI ,"と",BI,"は互いに素"
ENDIF
928 :
名無しさん@お腹いっぱい。:03/04/02 02:13
930 :
名無しさん@お腹いっぱい。:03/04/02 14:12
教えていただきたいのですが、PCがクラッシュ
してしまい、バックアップのFDも息子が
使ってしまい秘密鍵が完全になくなってしまいました。
サーバに登録してある公開鍵を削除したい
のですが、当然秘密鍵がないので、削除できません。
このような場合どうしたらよいでしょうか?
931 :
向こうから ◆tr.t4dJfuU :03/04/02 20:32
独り言
紙と鉛筆で いろいろ考え中です
言葉が足りなかった。
「どうすることも出来ない」(のではないか?)と、932に付け加えておく。
934 :
向こうから ◆tr.t4dJfuU :03/04/02 21:25
独り言(というより、930さんとは 別と言う意味で)
!!!
小さい数字で・・・
p=3 、q=5
n= 3*5 = 15
s=(3-1)*(5-1) = 2 * 4 = 8
e=7 は 、8を割れない素数で 7 とする。
求めたいのは、
d*7 mod 8 = 1
余ってしまう1を、d*7から 引いておけば、余りは出ない。
↓
d*7-1 mod 8 = 0
d*7−1 は、8で割り切れる
いくつで割れるのかは不明なので、Xとすると、、、
↓
d*7−1 = 8*X ・・・・・式A
両辺に1を足して、
d*7 = 8*X+1
両辺を7で割ると、
d = (8*X+1)/7
8*X+1 を 7 で割ると、答えがdになるので、この割り算に 余りは 発生しない
だから、
8*X+1 mod 7 = 0 となる・・・・・・・
935 :
向こうから ◆tr.t4dJfuU :03/04/02 21:25
さらに、ここで 判明したX’(確定したXのこと)は、
式Aの X であるから、
d*7−1 = 8 * X’
↓
d*7 = 8 * X' +1
↓
d= (8 * X’ + 1)/7
>>918 と、
>>924 を 併せて 考えました。
早速 打ち込みます(エクセルに)
936 :
向こうから ◆tr.t4dJfuU :03/04/02 21:27
937 :
名無しさん@お腹いっぱい。:03/04/02 21:38
938 :
名無しさん@お腹いっぱい。:03/04/02 21:43
上限を回避するために
493849238498129381298839284123981231みたいな数を
セルA1に4123981231
セルA2に8129883928
セルA3に2384981293
セルA4に493849
としてみたらどうでしょう
計算も工夫たらうまくいくと思います
939 :
向こうから ◆tr.t4dJfuU :03/04/02 22:04
データ型 記憶領域のサイズ 範囲
バイト型 (Byte) 1 バイト 0 〜 255
整数型 (Integer) 2 バイト -32,768 〜 32,767
長整数型 (Long) 4 バイト -2,147,483,648 〜 2,147,483,647
単精度浮動小数点数型 (Single) 4 バイト -3.402823E38 〜 -1.401298E-45 (負の値)。
1.401298E-45 〜 3.402823E38 (正の値)。
倍精度浮動小数点数型 (Double) 8 バイト -1.79769313486231E308 〜 -4.94065645841247E-324 (負の値)。
4.94065645841247E-324 〜 1.79769313486232E308 (正の値)。
通貨型 (Currency) 8 バイト -922,337,203,685,477.5808 〜 922,337,203,685,477.5807
10 進型 (Decimal) 14 バイト 小数部分を持たない数値の場合、
-79,228,162,514,264,337,593,543,950,335 〜 79,228,162,514,264,337,593,543,950,335 の範囲の値をとります。
小数点以下 28 桁の数値の場合、
-7.9228162514264337593543950335 〜 7.9228162514264337593543950335 の範囲の値をとります。
文字列型 (String) (可変長) 10 バイト + 文字列の長さ 0 〜 2GB
文字列型 (固定長) 文字列の長さ 1 〜 2GB
バリアント型 (Variant) (数値) 16 バイト 倍精度浮動小数点数型の範囲と同じ。
バリアント型 (Variant) (文字列) 22 バイト + 文字列の長さ 可変長の文字列型の範囲と同じ。
ユーザー定義型 要素に依存 それぞれの要素の範囲はそのデータ型の範囲と同じ。
関係ありそうなのの抜粋
プログラム完成です・・
ただ、ループの上限をどうしたらいいのか 不明です・・・
940 :
名無しさん@お腹いっぱい。:03/04/02 22:15
>>939 ループの上限はeにしておけば大丈夫ですよ
意外に大きい値が扱えるようですね
そろそろプログラム板か数学板に移ったら?
942 :
向こうから ◆tr.t4dJfuU :03/04/02 22:24
>>941 すみません、もうチョットだけ・・ 先生(名無しさん)と相談させてください。
Public Function DKAKEEMODSEQ1TOD(入力E, 入力S)
'd?*e Mod s = 1 となる d? を 検索 する
Dim e, s, d
Dim i, j
e = 入力E
s = 入力S
Debug.Print "d*"; e; "Mod"; s; "=1 の検索開始ーーーーー"
For i = 1 To e
If (s * i + 1) Mod e = 0 Then
Debug.Print "i="; i
j = (s * i + 1) / e
Debug.Print "答えの d="; j
Debug.Print " "
End If
Next i
Debug.Print "終了ーーーーーーーーーーーーーーーーーーーー"
DKAKEEMODSEQ1TOD = "完了"
End Function
943 :
向こうから ◆tr.t4dJfuU :03/04/02 22:25
でばくういんど
d* 109 Mod 352 =1 の検索開始ーーーーー
i= 61
答えの d= 197
終了ーーーーーーーーーーーーーーーーーーーー
d=197
検算もしました
余り 零 でした!
944 :
名無しさん@お腹いっぱい。:03/04/02 22:28
>>943 完璧です!
では試しに少し大きめのeとnとdを作ってeとnだけ晒してみて下さい
>>941 スレ汚し失礼しました
945 :
向こうから ◆tr.t4dJfuU :03/04/02 22:44
e=11
n=1537
晒す
946 :
名無しさん@お腹いっぱい。:03/04/02 22:47
>>944 別にいいよ。セキュ板ってマジで厨房多くなったから
難しい話題もなくなったし・・・
948 :
名無しさん@お腹いっぱい ◆40sw6QWs96 :03/04/02 22:49
ではc=416を晒しますので
m'を求めてそのキー(数字)でトリップ付けて下さい
一致すればオッケーです
949 :
向こうから ◆tr.t4dJfuU :03/04/02 22:53