RC4 암호 화 복호화 알고리즘 의 간단 한 실현

2255 단어
자료 출처:http://www.cnblogs.com/louzhang/archive/2012/05/08/2490755.html
오늘 오전 에 신 안 기초 수업 이 있어 서 수업 전에 복습 을 했 습 니 다.
RC4 를 보고 한 번 실현 하고 싶 은 동시에 복습 으로 삼 겠 습 니 다.
단지 너무 좌 절 했 을 뿐, 한 곳 은 잘못 이해 했다
바로 암호 화 복호화 입 니 다. 같은 S [] 를 사용 해 야 합 니 다.
이 S [] 는 암호 화 나 복호화 가 끝 난 후에 바 뀌 었 습 니 다.
나 는 줄곧 이 결 과 를 주의 하지 못 해서 줄곧 비극 적 이 었 다.
다음은 코드 가 올 라 갑 니 다. 아주 좌절 되 었 고 고치 고 싶 지 않 습 니 다. 어차피 알고리즘 의 절 차 를 알 게 되 었 습 니 다.
근 데 이런 스타일 도 제 가 바 꿔 야 될 스타일 이에 요.
주석: s 와 t 배열 은 int 나 char 를 사용 해도 됩 니 다.
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn=256+10;

void init(char *s, char *t, int len, char *key){
    for(int i = 0; i < maxn; i++){
        s[i] = i;
        t[i] = key[i % len];
    }
    for(int i = 0, j = 0; i < maxn; i++){
        j = (j + s[i] + t[i]) % maxn;
        swap(s[i], s[j]);
    }
}
void RC4(char *s, char *data, char *ans){
    int i = 0, j = 0;
    int l = strlen(data);
    //printf("%d
",l); for(int k = 0; k < l; k ++){ i = (i + 1) % maxn; j = (j + s[i]) % maxn; swap(s[i], s[j]); int t = (s[i] + s[j]) % maxn; ans[k] = s[t] ^ data[k]; cout<<ans[k]; } puts(""); ans[l] = '\0'; } int main(){ char key[maxn]; puts("input key"); scanf("%s", key); char keys[maxn]; strcpy(keys,key); char s[maxn], t[maxn]; //init(s, t, strlen(key), key); while(true){ init(s, t, strlen(keys), keys); puts("select it:"); puts("1: Encryption"); puts("2: Decryption"); int sel; scanf("%d", &sel); if(sel != 1 && sel != 2) break; switch(sel){ case 1:puts("inputs your message");break; case 2:puts("inputs your Ciphertext"); } char data[maxn]; char ans[maxn]; //scanf("%s", data); getchar(); gets(data); RC4(s, data, ans); printf("
%s
", ans); } return 0; }

좋은 웹페이지 즐겨찾기