SLIDE1

Sunday, May 31, 2015

[C/C++] lập trình giải mã mật thư Cesar

Cho một đoạn mật thư đã được mã hóa thành những chuỗi kí tự 0,1 với mỗi 5 kí tự số sẽ tương ứng với một kí tự trong bảng chữ cái alphabel. Thứ tự bảng mã sẽ giống với bảng chữ cái alphabel (Ví dụ a=00001 thì z=11010,a=01001 thì z=00001). Độ dịch của bảng sẽ là một số ngẫu nhiên từ 1 đến 100, bạn phải tìm ra để có được bảng mã đúng
Ví dụ: với a=00001
01111011001100101101100000100100001 0100110100 sẽ được giải mã là “olympia it”

000110000110101 011000000100011 0001001111 000111000010100sẽ được giải mã là “cau lac bo cpt”
Input: file1.inp
Đoạn mật thư tối đa 100000 kí tự
Output: file1.out

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
char dich(string s,int i)
{
    if(s=="00000") return 97-i;
    if(s=="00001") return 98-i;
    if(s=="00010") return 99-i;
    if(s=="00011") return 100-i;
    if(s=="00100") return 101-i;
    if(s=="00101") return 102-i;
    if(s=="00110") return 103-i;
    if(s=="00111") return 104-i;
    if(s=="01000") return 105-i;
    if(s=="01001") return 106-i;
    if(s=="01010") return 107-i;
    if(s=="01011") return 108-i;
    if(s=="01100") return 109-i;
    if(s=="01101") return 110-i;
    if(s=="01110") return 111-i;
    if(s=="01111") return 112-i;
    if(s=="10000") return 113-i;
    if(s=="10001") return 114-i;
    if(s=="10010") return 115-i;
    if(s=="10011") return 116-i;
    if(s=="10100") return 117-i;
    if(s=="10101") return 118-i;
    if(s=="10110") return 119-i;
    if(s=="10111") return 120-i;
    if(s=="11000") return 121-i;
    if(s=="11001") return 122-i;
    if(s=="11010") return 123-i;
    if(s=="11011") return 124-i;
    if(s=="11100") return 125-i;
    if(s=="11101") return 126-i;
    if(s=="11110") return 127-i;
    if(s=="11111") return 128-i;
    return 48;
}
void main()
{
    fstream t("file1.inp",ios::in);
    fstream f("file1.out",ios::out);
    string s,c;
    char a;
    int i,j;
    for(int k=1;k<100;k++)
    {
        while(!t.eof())
        {
            getline(t,s);
            i=0;
            while(i<s.size())
            {
                c=s.substr(i,5);
                i+=5;
                a=dich(c,k);
                f<<a;
                if(s[i]==' ')
                {
                    i++;
                    f<<" ";
                }
            }
            f<<endl;
        }
        f<<endl;
        t.clear();
        t.seekg(0,ios::beg);
    }
    t.close();
    system("pause");
}