내 전치 암호화 과정을 역전시키는 방법에 대해 머리를 감싸는 데 문제가 있습니다. 기본적으로 해독하려고합니다. 내 머리 속에 나는 암호문을 해독하기 위해 암호화 된 문자 메시지를 받아 들여야하며, 그 다음에 그것을 중계 배열의 위치로 대체해야한다고 생각한다.암호 해독
예를 들어, 전치 테이블을 사용하면 {2 4 0 1 3} i는 암호화 된 텍스트를 입력 배열로 스캔하여 암호화 된 텍스트를 0-4로 지정합니다. 예를 들어, {2 4 0 1 3}의 전치 테이블을 기반으로 한 "Jacks"는 "csJak"으로 암호화됩니다. 그러나 만약 내가 "csJak"에서 c가 입력 [0] 인 배열로 스캔한다면, s는 입력 [1]입니다.
그런 식으로 암호화 된 메시지에서 스캔 된 첫 번째 글자는 인쇄 될 것으로 가정되는 전치 슬롯의 세 번째 슬롯에 해당합니다. 그러나 내 생각을 코드에 삽입하는 방법을 모르겠다.
현재 조바꿈 암호화 암호 코드 :
#include <stdio.h>
int main(int argc, char *argv[]){
char input3[256];
char ch;
int i, j, k, npos;
FILE *file1=fopen(argv[1], "r");
FILE *file2=fopen(argv[2], "w");
sscanf(argv[3], "%d", &npos);
char transposition[npos];
for(i=0;i<npos;++i){
sscanf(argv[4+i], "%d", &k);
transposition[i] = k;
}
int len= sizeof(transposition);
char temp[len];
while(fgets(input3,sizeof(input3),file1)!=NULL){
i=0;
do {
for(j=0;j<len;j++){
ch = input3[i];
if(ch != '\n' && ch != '\0'){
temp[j] = ch;
++i;
} else {
temp[j] = ' ';
}
}
if(temp[0] != '.')
for(k=0;k<len;k++){
fprintf(file2,"%c", temp[transposition[k]]);
}
}
while(ch != '\n' && ch != '\0');
fprintf(file2,"\n");
}
return 0;
}
아주 기본적인 전치 암호 해독 프로그램
파일 "decrypttrans1.txt"만에 단어 "잭"을 가지고 가정 :
#include <stdio.h>
int main(int argc, char *argv[]){
char input[5], decrypted[256];
int i, j, k, ii;
int transposition[5]={'2','4','0','1','3'};
char plainText[5];
FILE *file1=fopen("decrypttrans1.txt", "r");
for(ii=0; ii<5;ii++) {
decrypt[encrypt[ii]]=ii;
}
for(ii=0;ii<5;ii++){
plainText[ii]=input[decrypt[ii]];
printf("%c", plainText[ii]);
}
}
return 0;
}
질문에 답변이 있으면 파기해서는 안됩니다. –