만약 모자라는 부분은 임의이 문자로 대치한다.
정해진 순서가 있기때문에 키값을 정해 순열을 정할수 있다.
예를들어 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
C++ 코드
#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;
}
'정보 보안' 카테고리의 다른 글
Vigenere 암호(Vigenere cipher) (0) | 2011.05.21 |
---|---|
단일 대치 암호(mono-alphabetic substitution cipher) (0) | 2011.05.21 |
시저 암호(Caesar cipher) (0) | 2011.05.21 |