728x90
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
int main()
{
char S[256];
char K[256];
int i, t;
char key[] = "key";
char plainText[] = "killhitler";
vector<char> KeyStream(strlen(plainText));
cout << "키 값: " << key << endl;
cout << "평문 : " << plainText << endl;
//초기화
for (i = 0; i < 256; i++){
S[i] = i;
K[i] = key[i % strlen(key)];
}
int j = 0;
// S의 배열을 섞는다.
for (i = 0; i < 256; i++) {
j = (j + S[i] + K[i]) % 256;
swap(S[i], S[j]);
}
i = j = 0;
//암호화 과정
for (int k = 0; k < strlen(plainText); k++)
{
i = (i + 1) % 256;
j = (j + S[i]) % 256;
swap(S[i], S[j]);
t = (S[i] + S[j]) % 256;
KeyStream[k] = S[t];
plainText[k] ^= S[KeyStream[k]]; // 암호화
cout << (k + 1) << "'s 키스트림 : " << (unsigned int)KeyStream[k] << endl;
}
cout << endl << "암호화된 평문 : " << plainText << endl;
//복호화 과정
for (int k = 0; k < strlen(plainText); k++){
plainText[k] ^= S[KeyStream[k]]; // 복호화
}
cout << endl << "복호화된 평문 : " << plainText << endl;
exit(0);
}
728x90
'Major > Security' 카테고리의 다른 글
[시스템 보안] Chapter 3 - 대칭키 암호 (0) | 2021.10.09 |
---|