あれです。月曜3限の謎のじゅぎょうの RSA暗号の問題のやつを授業中にぽろぽろと書いたコードなんだけど、なんかオーバーフローしてる?疑惑があって、結局できてんだかわからないけど、暗号化までは出来てると思う。
というか、レジュメに載っているレベルの桁数の対処の仕方はよくわかってない
#include <iostream> #include <cmath> using namespace std; int gcd( int m, int n ); int lcm( int m, int n ); //最大公約数と最小公倍数は割愛 int main(void){ const int H=123; const int p=17.0; const int q=19.0; long double E=0,D=0; const double N = p*q; const double L = lcm(p-1,q-1); cout << "Nは" << N << endl; cout << "Lは" << L << endl; for(int i_forE=1; i_forE<200; i_forE++) { E=i_forE; if( gcd(E,L) == 1){ for(int i_forD=1; i_forD<200; i_forD++) { D=i_forD; if( fmodl(E*D,L) == 1) { cout << "平文を "<< H <<" , " ; cout << "Eを " << E << " , Dを " << D << " として, " ; cout << "暗号文は " << fmodl(pow(H,E),N) << " で, " ; cout << "複合すると " << fmodl(pow(fmodl(pow(H,E),N),D),N) << "です" << endl; } } } } return 0; }
でやると結果が、
Nは323 Lは144 平文を 123 , Eを 1 , Dを 1 として, 暗号文は 123 で, 複合すると 123です 平文を 123 , Eを 1 , Dを 145 として, 暗号文は 123 で, 複合すると 84です 平文を 123 , Eを 5 , Dを 29 として, 暗号文は 225 で, 複合すると 43です 平文を 123 , Eを 5 , Dを 173 として, 暗号文は 225 で, 複合すると 67です 平文を 123 , Eを 7 , Dを 103 として, 暗号文は 251 で, 複合すると 220です 平文を 123 , Eを 11 , Dを 131 として, 暗号文は 265 で, 複合すると 139です 平文を 123 , Eを 13 , Dを 133 として, 暗号文は 317 で, 複合すると 154です 平文を 123 , Eを 17 , Dを 17 として, 暗号文は 314 で, 複合すると 109です 平文を 123 , Eを 17 , Dを 161 として, 暗号文は 314 で, 複合すると 155です 平文を 123 , Eを 19 , Dを 91 として, 暗号文は 129 で, 複合すると 177です 平文を 123 , Eを 23 , Dを 119 として, 暗号文は 110 で, 複合すると 45です 平文を 123 , Eを 25 , Dを 121 として, 暗号文は 128 で, 複合すると 230です 平文を 123 , Eを 29 , Dを 5 として, 暗号文は 73 で, 複合すると 99です 平文を 123 , Eを 29 , Dを 149 として, 暗号文は 73 で, 複合すると 10です 平文を 123 , Eを 31 , Dを 79 として, 暗号文は 217 で, 複合すると 206です 平文を 123 , Eを 35 , Dを 107 として, 暗号文は 269 で, 複合すると 237です 平文を 123 , Eを 37 , Dを 109 として, 暗号文は 299 で, 複合すると 133です 平文を 123 , Eを 41 , Dを 137 として, 暗号文は 296 で, 複合すると 158です 平文を 123 , Eを 43 , Dを 67 として, 暗号文は 292 で, 複合すると 80です 平文を 123 , Eを 47 , Dを 95 として, 暗号文は 253 で, 複合すると 50です 平文を 123 , Eを 49 , Dを 97 として, 暗号文は 18 で, 複合すると 128です 平文を 123 , Eを 53 , Dを 125 として, 暗号文は 207 で, 複合すると 4です 平文を 123 , Eを 55 , Dを 55 として, 暗号文は 158 で, 複合すると 76です 平文を 123 , Eを 55 , Dを 199 として, 暗号文は 158 で, 複合すると 260です 平文を 123 , Eを 59 , Dを 83 として, 暗号文は 217 で, 複合すると 208です 平文を 123 , Eを 61 , Dを 85 として, 暗号文は 230 で, 複合すると 251です 平文を 123 , Eを 65 , Dを 113 として, 暗号文は 169 で, 複合すると 169です 平文を 123 , Eを 67 , Dを 43 として, 暗号文は 12 で, 複合すると 156です 平文を 123 , Eを 67 , Dを 187 として, 暗号文は 12 で, 複合すると 208です 平文を 123 , Eを 71 , Dを 71 として, 暗号文は 99 で, 複合すると 89です 平文を 123 , Eを 73 , Dを 73 として, 暗号文は 65 で, 複合すると 110です 平文を 123 , Eを 77 , Dを 101 として, 暗号文は 47 で, 複合すると 236です 平文を 123 , Eを 79 , Dを 31 として, 暗号文は 90 で, 複合すると 43です 平文を 123 , Eを 79 , Dを 175 として, 暗号文は 90 で, 複合すると 209です 平文を 123 , Eを 83 , Dを 59 として, 暗号文は 220 で, 複合すると 48です 平文を 123 , Eを 85 , Dを 61 として, 暗号文は 244 で, 複合すると 304です 平文を 123 , Eを 89 , Dを 89 として, 暗号文は 201 で, 複合すると 319です 平文を 123 , Eを 91 , Dを 19 として, 暗号文は 314 で, 複合すると 4です 平文を 123 , Eを 91 , Dを 163 として, 暗号文は 314 で, 複合すると 299です 平文を 123 , Eを 95 , Dを 47 として, 暗号文は 42 で, 複合すると 192です 平文を 123 , Eを 95 , Dを 191 として, 暗号文は 42 で, 複合すると 165です 平文を 123 , Eを 97 , Dを 49 として, 暗号文は 194 で, 複合すると 69です 平文を 123 , Eを 97 , Dを 193 として, 暗号文は 194 で, 複合すると 85です 平文を 123 , Eを 101 , Dを 77 として, 暗号文は 90 で, 複合すると 261です 平文を 123 , Eを 103 , Dを 7 として, 暗号文は 11 で, 複合すると 258です 平文を 123 , Eを 103 , Dを 151 として, 暗号文は 11 で, 複合すると 104です 平文を 123 , Eを 107 , Dを 35 として, 暗号文は 295 で, 複合すると 17です 平文を 123 , Eを 107 , Dを 179 として, 暗号文は 295 で, 複合すると 141です 平文を 123 , Eを 109 , Dを 37 として, 暗号文は 54 で, 複合すると 71です 平文を 123 , Eを 109 , Dを 181 として, 暗号文は 54 で, 複合すると 317です 平文を 123 , Eを 113 , Dを 65 として, 暗号文は 275 で, 複合すると 294です 平文を 123 , Eを 115 , Dを 139 として, 暗号文は 240 で, 複合すると 115です 平文を 123 , Eを 119 , Dを 23 として, 暗号文は 257 で, 複合すると 227です 平文を 123 , Eを 119 , Dを 167 として, 暗号文は 257 で, 複合すると 136です 平文を 123 , Eを 121 , Dを 25 として, 暗号文は 24 で, 複合すると 282です 平文を 123 , Eを 121 , Dを 169 として, 暗号文は 24 で, 複合すると 16です 平文を 123 , Eを 125 , Dを 53 として, 暗号文は 216 で, 複合すると 142です 平文を 123 , Eを 125 , Dを 197 として, 暗号文は 216 で, 複合すると 170です 平文を 123 , Eを 127 , Dを 127 として, 暗号文は 144 で, 複合すると 201です 平文を 123 , Eを 131 , Dを 11 として, 暗号文は 162 で, 複合すると 220です 平文を 123 , Eを 131 , Dを 155 として, 暗号文は 162 で, 複合すると 158です 平文を 123 , Eを 133 , Dを 13 として, 暗号文は 108 で, 複合すると 129です 平文を 123 , Eを 133 , Dを 157 として, 暗号文は 108 で, 複合すると 89です 平文を 123 , Eを 137 , Dを 41 として, 暗号文は 19 で, 複合すると 226です 平文を 123 , Eを 137 , Dを 185 として, 暗号文は 19 で, 複合すると 240です 平文を 123 , Eを 139 , Dを 115 として, 暗号文は 243 で, 複合すると 251です 平文を 123 , Eを 143 , Dを 143 として, 暗号文は 170 で, 複合すると 258です 平文を 123 , Eを 145 , Dを 1 として, 暗号文は 84 で, 複合すると 84です 平文を 123 , Eを 145 , Dを 145 として, 暗号文は 84 で, 複合すると 255です 平文を 123 , Eを 149 , Dを 29 として, 暗号文は 131 で, 複合すると 235です 平文を 123 , Eを 149 , Dを 173 として, 暗号文は 131 で, 複合すると 290です 平文を 123 , Eを 151 , Dを 103 として, 暗号文は 104 で, 複合すると 32です 平文を 123 , Eを 155 , Dを 131 として, 暗号文は 221 で, 複合すると 6です 平文を 123 , Eを 157 , Dを 133 として, 暗号文は 278 で, 複合すると 211です 平文を 123 , Eを 161 , Dを 17 として, 暗号文は 27 で, 複合すると 21です 平文を 123 , Eを 161 , Dを 161 として, 暗号文は 27 で, 複合すると 177です 平文を 123 , Eを 163 , Dを 91 として, 暗号文は 172 で, 複合すると 166です 平文を 123 , Eを 167 , Dを 119 として, 暗号文は 194 で, 複合すると 138です 平文を 123 , Eを 169 , Dを 121 として, 暗号文は 126 で, 複合すると 106です 平文を 123 , Eを 173 , Dを 5 として, 暗号文は 1 で, 複合すると 1です 平文を 123 , Eを 173 , Dを 149 として, 暗号文は 1 で, 複合すると 1です 平文を 123 , Eを 175 , Dを 79 として, 暗号文は 117 で, 複合すると 160です 平文を 123 , Eを 179 , Dを 107 として, 暗号文は 23 で, 複合すると 84です 平文を 123 , Eを 181 , Dを 109 として, 暗号文は 292 で, 複合すると 35です 平文を 123 , Eを 185 , Dを 137 として, 暗号文は 106 で, 複合すると 234です 平文を 123 , Eを 187 , Dを 67 として, 暗号文は 81 で, 複合すると 223です 平文を 123 , Eを 191 , Dを 95 として, 暗号文は 235 で, 複合すると 84です 平文を 123 , Eを 193 , Dを 97 として, 暗号文は 102 で, 複合すると 143です 平文を 123 , Eを 197 , Dを 125 として, 暗号文は 89 で, 複合すると 253です 平文を 123 , Eを 199 , Dを 55 として, 暗号文は 42 で, 複合すると 81です 平文を 123 , Eを 199 , Dを 199 として, 暗号文は 42 で, 複合すると 160です
確実に複合化の式の結果がオーバーフローしてる。