Last active
June 13, 2016 03:10
-
-
Save redgosho/10933840eea1b770f5530ccd33931e3d to your computer and use it in GitHub Desktop.
RSA暗号 p,q,dを自分で入力するタイプ。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
int bainari(int e_10to2,int n,int m) | |
{ | |
int num_2[200],amari,count,i=0,bi,bi1,ri,ri1; | |
while(e_10to2 >= 1){ | |
amari = e_10to2 % 2; | |
e_10to2 = e_10to2 / 2; | |
num_2[i] = amari; | |
i++; | |
}num_2[i] = 0; | |
num_2[i] = 0; | |
count = i - 1; | |
bi1 = m; | |
bi = m; | |
ri1 = 1; | |
for (int k = 0; k <= count; k++) | |
{ | |
if(k == 0 && num_2[k] == 1){ | |
ri = bi * ri1 % n; | |
ri1 = ri; | |
bi1 = bi; | |
}else if(k == 0 && num_2[k] == 0){ | |
bi = bi1 * bi1 % n; | |
ri1 = ri; | |
bi1 = bi; | |
}else if(num_2[k] == 0){ | |
bi = bi1 * bi1 % n; | |
ri1 = ri; | |
bi1 = bi; | |
}else{ | |
bi = bi1 * bi1 % n; | |
ri = bi * ri1 % n; | |
ri1 = ri; | |
bi1 = bi; | |
} | |
} | |
return ri; | |
} | |
int yukuri(int modafter,int ddd){ | |
int gi,gi1,gi2,ri,ri1,ri2,ti,ti1=1,ti2=0; | |
gi2 = 0; | |
ri2 = modafter; | |
gi1 = modafter / ddd; | |
ri1 = ddd; | |
do{ | |
ri = ri2 - gi1 * ri1; | |
ti = ti2 - gi1 * ti1; | |
gi = ri1 / ri; | |
gi2 = gi1; | |
gi1 = gi; | |
ri2 = ri1; | |
ri1 = ri; | |
ti2 = ti1; | |
ti1 = ti; | |
}while(ri != 1); | |
ti = modafter + ti; | |
return ti; | |
} | |
int main() | |
{ | |
int p,q,d,n,e,m,modafter,c,search,flag; | |
printf("秘密鍵p(素数)を入力\n>>"); | |
scanf("%d",&p); | |
printf("秘密鍵q(素数)を入力\n>>"); | |
scanf("%d",&q); | |
printf("秘密鍵d(整数)を入力\n>>"); | |
scanf("%d",&d); | |
printf("秘密鍵:p->%d,q->%d,d->%d\n",p,q,d); | |
modafter = (p-1)*(q-1); | |
e = yukuri(modafter,d); | |
n = p * q; | |
printf("公開鍵:n->%d,e->%d\n",n,e ); | |
do{ | |
printf("暗号化したいときは「0」を\n復号したい時は「1」を入力\n>>"); | |
scanf("%d",&search); | |
if(search == 0){ | |
printf("暗号化したい数字を入力\n>>"); | |
scanf("%d",&m); | |
c = bainari(e,n,m); | |
printf("暗号化:c->%d\n\n",c ); | |
printf("まだ暗号化、復号を続けたい場合は「1」を\n終了する場合はそれ以外の数字を入力\n>>"); | |
scanf("%d",&flag); | |
}else if(search == 1){ | |
printf("復号したい数字を入力\n>>"); | |
scanf("%d",&c); | |
m = bainari(d,n,c); | |
printf("復号結果:m->%d\n\n",m ); | |
printf("まだ暗号化、復号を続けたい場合は「1」を\n終了する場合はそれ以外の数字を入力\n>>"); | |
scanf("%d",&flag); | |
}else{ | |
printf("「0」か「1」を入力してください。\n"); | |
flag = 1; | |
} | |
}while(flag == 1); | |
printf("終了\n"); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment