2017-05-06 13 views
0

HZVIG.cpp :Vigenere 암호 C++

#include "HZVIG.h" 

char ROTEncode(char inchar, int rot) 
{ 
    if (IsBigLetter(inchar)) 
     return ((int)inchar - (int)'A' + rot) % 26 + 'A' - 1; 
    else if (IsSmallLetter(inchar)) 
     return ((int)inchar - (int)'a' + rot) % 26 + 'a' - 1; 
    else 
     return inchar; 
} 
char ROTDecode(char inchar, int rot) 
{ 
    if (IsBigLetter(inchar)) 
     return ((int)inchar - (int)'A' - rot + 26) % 26 + 'A' - 1; 
    else if (IsSmallLetter(inchar)) 
     return ((int)inchar - (int)'a' + rot + 26) % 26 + 'a' - 1; 
    else 
     return inchar; 
} 
std::string VIGDecode(std::string instring, std::string key) 
{ 
    std::string result; 
    for (int i = 0; i < instring.length(); i++) 
     result += ROTDecode(instring[i], key[i % key.length()] - 'A' + 1); 
    return result; 
} 
std::string VIGEncode(std::string instring, std::string key) 
{ 
    std::string result; 
    for (int i = 0; i < instring.length(); i++) 
     result += ROTEncode(instring[i], key[i % key.length()] - 'A' + 1); 
    return result; 
} 

HZVIG.h : 그것은해야

C:\Users\adm1n\Desktop\C\HZToolkit>HZToolkit --evig --key ALPHA HZU18{CLASSICAL_CIPHER} 
HKJ18{NAHSSTRHL_NXWHEC} 

:이 코드는 작동하지만 잘못된 출력이

#include <string> 

#define IsBigLetter(a) a >= 'A' && a <= 'Z' 
#define IsSmallLetter(a) a >= 'a' && a <= 'z' 

std::string VIGDecode(std::string instring, std::string key); 
std::string VIGEncode(std::string instring, std::string key); 

HKJ18 { JLADHPCAW_RPPHPG} 입력이 괜찮다고 생각합니다. 기능이 잘못되었습니다. C : \ Users \ adm1n \ Desktop \ C \ HZToolkit> HZToolkit --evig --key 알파 알파 출력 : AWEOA

답변

0

왜 이것이 잘못된 것 같니? 평문이 글자가 아닐지라도 키를 여전히 "전진"시켜야합니다 (적어도 현재는 프로그램이하는 일입니다).

 Plain: HZU18{CLASSICAL... 
     Key: ALPHAALPHAALPHA... 
      ^  ^^ ^
    You get: HKJ18{NAHSSTRHL... 
You expect: HKJ18{JLADHPCAW... 

^로 표시된 장소 : 일반 텍스트를 맞추고 키 복제

키가 A 동일 곳 사람들은, 그래서 더 암호화 장소도지지 않습니다을 (일반 텍스트 문자는 암호문 문자됩니다) .

나에게 잘 보입니다.

(암호 해독이 깨졌습니다. 힌트로, ROTDecode은 같은 방식으로 소문자와 대문자를 처리하지 않습니다).

+0

감사합니다. 나는 틀린 것을 이해했다 : 함수는 비 알파벳 기호를 무시해야한다. –