Quy tắc mã hóa :
Solution tham khảo:
Đ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.
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.
#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
|
Thông điệp 4:
9
|
3
|
2
|
+
|
+
|
9
|
&
|
9
|
8
|
:
|
;
|
>
|
9
|
.
|
%
|
)
|
>
|
?
|
,
|
+
|
-
|
<
|
-
|
8
|
=
|
3
|
(
|
-
|
#
|
/
|
=
|
8
|
>
|
3
|
,
|
+
|
?
|
=
|
-
|
8
|
>
|
3
|
,
|
;
|
-
|
<
|
-
|
9
|
Không có nhận xét nào:
Đăng nhận xét