뭉기 2009. 1. 22. 22:54

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

 

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;
}