카이사르 암호 (C++)
시저암호라고 불리는 카이사르 암호입니다.
아주 옛날에 만들어진 암호로 알고리즘은 a부터 z까지 원형큐에 있다고 생각하면 쉽게 풀수있습니다.
코드는 다음과 같습니다.
#include <iostream>
#include <string>
//https://ko.wikipedia.org/wiki/%EB%B9%84%EC%A6%88%EB%84%A4%EB%A5%B4_%EC%95%94%ED%98%B8
class CaesarCipher {
public:
CaesarCipher() = default;
std::string encryption(std::string str,std::uint8_t sift) {
std::string encryString = "";
for (auto & i : str) {
if (i == ' ') { encryString += ' '; continue; }
char temp = i - CaesarCipher::First;
encryString += CharMap[(temp+ sift)%CharMap.length()];
}
return encryString;
}
std::string decryption(std::string str, std::uint8_t sift) {
std::string decryString = "";
for (auto & i : str) {
if (i == ' ') { decryString += ' '; continue; }
char temp = i - CaesarCipher::First;
temp = (temp - sift);
char bind = temp < 0 ? CharMap.length() + temp: temp;
decryString += CharMap[(bind) % CharMap.length()];
}
return decryString;
}
static std::string CharMap;
static std::uint8_t First;
};
std::string CaesarCipher::CharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::uint8_t CaesarCipher::First = 'A';
int main()
{
CaesarCipher casesar;
auto i = casesar.encryption("ACOME TO ROMERZ", 3);
std::cout << i << std::endl;
i = casesar.decryption(i, 3);
std::cout << i << std::endl;
}
C++ 챌린지 문제를 풀다가 나온문제인데 이게 암호화 라고해야하나…