@Plesio_

@Plesio_ が思ったことを書く

授業中につくったやつ

あれです。月曜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です

確実に複合化の式の結果がオーバーフローしてる。