만약 모자라는 부분은 임의이 문자로 대치한다.
정해진 순서가 있기때문에 키값을 정해 순열을 정할수 있다.
예를들어 1 2 3 4 5 6 7 이란 순서를
3 4 5 7 1 6 4 2 이렇게 뒤집는다는 소리다.
만약 총 글자의 수가 7로 나누어 떨어지지 않는다면 빈 자리가 있을수 있기때문에 그 자리를 임의의 문자나 무언가로 대치한다.
평문 : My name is Peace 암호문 : aeMmnysPa e ixxxcxxe 복호문 : My name is Peace #define BLOCK_SIZE 7 #include <iostream> using namespace std; int main() { int i,j,size, block_num; int key[64]={3,5,7,1,6,4,2}; char p_text[64], c_text[64],d_text[64]; cout<<"평문 입력 : "; gets(p_text); size=strlen(p_text); if(size%BLOCK_SIZE>0) { block_num = strlen(p_text) / BLOCK_SIZE +1; for(i=strlen(p_text);i<block_num*BLOCK_SIZE;i++) p_text[i]='x'; } else block_num = strlen(p_text) /BLOCK_SIZE; for(i = 0;i<block_num;i++) for(j=0;j<BLOCK_SIZE;j++) c_text[i*BLOCK_SIZE+j] = p_text[(key[j]-1)+i*BLOCK_SIZE]; cout<<"암호문 : "; for(i=0;i<block_num*BLOCK_SIZE;i++) cout<<c_text[i]; cout<<endl; for(i=0;i<block_num;i++) for(j=0;j<BLOCK_SIZE;j++) d_text[(key[j]-1)+i*BLOCK_SIZE] = c_text[i*BLOCK_SIZE+j]; cout<<"복호문 : "; for(i=0;i<size;i++) cout<<d_text[i]; cout<<endl; }
C++ 코드
'정보 보안' 카테고리의 다른 글
Vigenere 암호(Vigenere cipher) (0) | 2011.05.21 |
---|---|
단일 대치 암호(mono-alphabetic substitution cipher) (0) | 2011.05.21 |
시저 암호(Caesar cipher) (0) | 2011.05.21 |