시저암호라고 불리는 카이사르 암호입니다.

아주 옛날에 만들어진 암호로 알고리즘은 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++ 챌린지 문제를 풀다가 나온문제인데 이게 암호화 라고해야하나…

카테고리: C++Programing

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다