Thứ Sáu, 15 tháng 11, 2013

Solution hỗ trợ giải mã thông điệp

Solution này dùng để giải các thông điệp được xây dựng trên cách mã hóa sau:
Quy tắc mã hóa :
Đoạn thông điệp được mã hóa là một đoạn văn bản có ý nghĩa. Đầu và cuối thông điệp không có khoảng trắng. Các ký tự sử dụng trong đoạn văn bản này là các ký tự có giá trị từ 32 đến 126 trong bảng mã ASCII.
Đoạn văn bản được mã hóa theo một khoá K. Khoá K có giá trị trong đoạn [0, 255].
     Bước 1: Các ký tự trong thông điệp ban đầu sẽ được chuyển sang dạng nhị phân
     Bước 2: Các ký tự này (ở dạng nhị phân) sẽ thực hiện phép toán XOR với khóa K cho trước để được bản tin đã mã hoá.
     Bước 3: Dãy nhị phân của bản tin đã mã hóa được chia thành các nhóm 5 bit. Mỗi nhóm 5 bit này được thêm vào bit 1 ở đầu và chuyển thành ký tự có mã ASCII tương ứng.


Solution tham khảo:
#include<iostream>  
#include<cstring>
#include<cmath>
char c[1000], s[1000];
using namespace std;
int swap(int a,int base,int& k,bool& ch) 
if (a>=base) swap(a/base,base,k,ch); 
    if (!ch) c[k++]=(a%base)["0123456789ABCDEF"];  
ch=false;
return 0;
int main()
{
int l[8],base;
l[0]=1; l[1]=2; l[2]=4; l[3]=8; l[4]=16; l[5]=32; l[6]=64; l[7]=128;
cout<<"Nhap doan van ma hoa: ";
cin>>s;
cout<<"Nhap key: ";
cin>>base;
int k=0;
for(int i=0;i<strlen(s);i++) {
bool ch=true;
swap(s[i]+0,2,k,ch);
}
int i=0, j=7, x=0;
cout<<"Doan van sau khi giai ma:"<<endl;
while (i<strlen(c)) {
x+=(c[i]=='1')?l[j]:0;
j--;
if ((i+1)%8==0) {
x^=base;
cout<<char(x);
x=0;
j=7;
i++;
}
cout<<endl;
return 0;
}

Một số thông điệp tham khảo:

Thông điệp 1:
> 
?
)
8
'
1
< 
$
9
'
"
8
5
2
6
,
0
3
(
-
#
#
4
#
0
3
0
(
3
:
> 
+
0
/
%
,
'
!
&

8
#
%
?
5
"
6
-
Key: 164.

Thông điệp 2:
6
2
3
8
=
1
< 
;
6
&
-
=
/
.
.
)
2
/
#
8
7
#
6
'
0
.
!
8
=
1
< 
*
1
"
< 
< 
3
$
> 
'
0
.
#
,
?
2
,
*
Key: 231.

Thông diệp 3:
4
> 
7
/
3
4
%
6
?
7
/
/
3
)
7
*
9
+
5
*
?
-
6
7
7
;
< 
+
-
9
&
6
;
+
5
+
-
> 
> 
#
;
'
$
+
#
> 
'
1
Key 106.

Thông điệp 4:
9
3
2
+
+
9
&
9
8
:
;
> 
9
.
%
)
> 
?
,
+
-
< 
-
8
=
3
(
-
#
/
=
8
> 
3
,
+
?
=
-
8
> 
3
,
;
-
< 
-
9
Key: 152.

Không có nhận xét nào:

Đăng nhận xét