본문 바로가기

개발자 기본 소양/암호학

RC4 예제1


복호화 소스로 바꿔주심 감사하겠습니다~~부탁드려요~

 

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