RC4 암호 화 복호화 알고리즘 의 간단 한 실현
오늘 오전 에 신 안 기초 수업 이 있어 서 수업 전에 복습 을 했 습 니 다.
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.