컴퓨터/정보보호,인공지능

RSA 암호 코드 |

saturn_99 2010. 5. 31. 11:05
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define e 7

long MOD(int a, int b){
while(1){
if( a < b )
return a;
else
{a=a%b;}}
}

int mod(int A, int B, int C)
{
long index[30];
long Last[30];
long *PB;
long *L;
int *P_B;
int index_B[30];

PB=index;
L=Last;
P_B=index_B;

memset(PB, NULL, sizeof(long)*30); // 배열 초기화
memset(L,NULL,sizeof(long)*30); // 배열 초기화
memset(P_B,NULL,sizeof(int)*30); // 배열 초기화

int result;
int i;
long _B=1; // _B는 지수 카운터
for(i=1; _B<=B; i++){
*P_B=_B;
if(PB==index) {PB=PB+1; *PB=MOD(A, C); } 
else {
PB=PB+1;
*PB=MOD((*(PB-1)*(*(PB-1))), C);
}
P_B++;
_B=_B*2;
// printf("i=%d 일 때 ,*PB = %d , _B = %d\n",i,*PB, _B); 
}
P_B--;
while( PB!=index ) {
if(*P_B <= B)
{
B=B-*P_B;
*L=*PB;
L++;
PB--;
P_B--;
}
else
{PB--; P_B--;}

}
L=Last;
result=*L;

while(*L!=NULL) {
L++;
if(*L==NULL) break;
result=MOD(result*(*L),C);
}
return result;
}

void main()
{
printf("99,7,187= %d",mod(99,7,187)); printf("\n");
printf("97,7,187= %d",mod(97,7,187));printf("\n");
printf("\n");
printf("mod(99,7,187),23,187=%d",mod(mod(99,7,187),23,187));printf("\n");
printf("mod(97,7,187),23,187=%d",mod(mod(97,7,187),23,187));printf("\n");

long p, q;
// printf("두 소수 p, q선택\n");
// scanf_s("&d &d", &p, &q);
p = 17; q= 11;

long N=p*q;
long PI_N=(p-1)*(q-1);

long d;
long i;
for(i=1; i<1000; i++){
if(mod(i*e,1,PI_N)==1){
d=i; break;}
}
char inpu[31];
memset(inpu, NULL, sizeof(char)*30); // 배열 초기화
int input[31];
memset(input, NULL, sizeof(int)*30); // 배열 초기화
int crypt[31];
memset(crypt, NULL, sizeof(int)*30); // 배열 초기화
int decrypt[31];
memset(decrypt, NULL, sizeof(int)*30); // 배열 초기화
printf("문장 입력 : ");
gets_s(inpu);

for(i=0;inpu[i]!=NULL; i++){
input[i]=int(inpu[i]);}

printf("99 e N : %d\n", mod(99,e,N));
printf("mod(99,e,N) d N : %d\n", mod(mod(99,e,N),d,N));
//암호화
for(i=0; input[i]!=NULL; i++){
crypt[i]=mod(input[i],e,N);
printf("평문:%d;%c암호문:%d;%c\n",input[i],input[i],crypt[i],crypt[i]);
}
//복호화
for(i=0; crypt[i]!=NULL; i++){
decrypt[i]=mod(crypt[i],d,N);
printf("%c",decrypt[i]);
}
printf("dd");

}

'컴퓨터 > 정보보호,인공지능' 카테고리의 다른 글

비교흡수  (0) 2010.06.07
기말고사  (0) 2010.06.07
Modulo연산 | 모듈러 연산 코드  (0) 2010.05.30
RSA  (0) 2010.05.24
공개키 암호 시스템  (0) 2010.05.24