복호화 소스로 바꿔주심 감사하겠습니다~~부탁드려요~
char* rc4(char *data, char *key1, int size)
{
int i,j,m,k=0,len=0,l=0,t=0, count = 0;
int S[256];
int T[256];
char *encrypt;
encrypt=malloc(size);
/* Initialization */
len=strlen(key1);
for(i=0;i<256;i++)
{
S[i]=i;
T[i]=key1[i % len];
}
j=0;
for(i=0;i<256;i++)
{
j=((j+S[i]+T[i]) % 256);
SWAP(S[i],S[j]);
}
//stream generation
i=0;
j=0;
for(m=0;m<size;m++)
{
i=(i+1) % 256;
j=(j+S[i]) % 256;
SWAP(S[i], S[j]);
t=(S[i]+S[j]) % 256;
k=S[t];
encrypt[m]=k^data[m];
}
return encrypt;
}
/*
제시하신 코드의 rc4함수는 암호화와 복호화가 동일한 함수로 이루어집니다.
따라서, 아래 예처럼 암호화한 결과를 rc4 함수의 data란에 다시 지정해주고 암호화키도 원래의 키를 지정하고 길이도 원래의 길이를 입력해주면 원본이 나옵니다.
*/
int main()
{
char str[]="abeirtrtfutgnfgkflkgjkfljglfjglfl";
char *enc,*org;
char key[]="keyofencr";
printf("\n%s",str);
enc = rc4(str,key,strlen(str));
printf("\n%s",enc);
org = rc4(enc,key,strlen(str));
printf("\n%s",org);
return 0;
}
'개발자 기본 소양 > 암호학' 카테고리의 다른 글
암호/보안기술 연구정보 (0) | 2009.03.02 |
---|---|
전자서명 (digital signature) (0) | 2009.03.02 |
해쉬함수 (hash function) (0) | 2009.03.02 |
블록암호 (block cipher) (0) | 2009.03.02 |
국가 표준 암호 알고리즘 (1) | 2009.03.02 |