Chương <br />
4. <br />
Mã <br />
hóa <br />
đối <br />
xứng <br />
<br />
Symmetric <br />
Crytography <br />
<br />
Lương <br />
Ánh <br />
Hoàng <br />
<br />
<br />
hoangla@soict.hut.edu.vn <br />
<br />
<br />
Nội <br />
dung <br />
<br />
4.1 <br />
Biểu <br />
diễn <br />
khóa <br />
<br />
4.2 <br />
Chuyển <br />
đổi <br />
chuỗi <br />
hexa <br />
và <br />
khóa <br />
nhị <br />
phân. <br />
<br />
4.3 <br />
Mã <br />
hóa <br />
và <br />
giải <br />
mã <br />
Base64 <br />
<br />
<br />
4.4 <br />
Các <br />
phương <br />
pháp <br />
mã <br />
hóa <br />
đối <br />
xứng <br />
<br />
4.5 <br />
Mã <br />
hóa <br />
đối <br />
xứng <br />
với <br />
OpenSSL <br />
<br />
4.6 <br />
Mã <br />
hóa <br />
đối <br />
xứng <br />
với <br />
Microsoft <br />
Crypto <br />
API <br />
<br />
<br />
56 <br />
<br />
<br />
4.1 <br />
Biểu <br />
diễn <br />
khóa <br />
<br />
• Khóa <br />
đối <br />
xứng: <br />
<br />
Một <br />
số <br />
rất <br />
lớn <br />
sử <br />
dụng <br />
để <br />
mã <br />
hóa <br />
và <br />
giải <br />
mã <br />
thông <br />
<br />
điệp. <br />
<br />
• Biểu <br />
diễn <br />
khóa: <br />
<br />
• Phân <br />
tách <br />
thành <br />
các <br />
byte <br />
và <br />
lưu <br />
dưới <br />
dạng <br />
một <br />
mảng. <br />
<br />
unsigned <br />
char <br />
<br />
key[KEYLEN_BYTES] <br />
<br />
• Biểu <br />
diễn <br />
dưới <br />
dạng <br />
số <br />
nguyên <br />
lớn <br />
nếu <br />
khóa <br />
có <br />
chiều <br />
dài <br />
64-‐bit <br />
<br />
long <br />
<br />
<br />
<br />
<br />
<br />
long <br />
<br />
<br />
<br />
<br />
<br />
<br />
key <br />
<br />
• Biểu <br />
diễn <br />
dưới <br />
dạng <br />
chuỗi <br />
chữ <br />
số <br />
hexa <br />
<br />
<br />
char<br />
<br />
key[]=“AF12B5C7E0…” <br />
<br />
• Biểu <br />
diễn <br />
dưới <br />
dạng <br />
xâu <br />
ASCII <br />
(mật <br />
khẩu). <br />
<br />
<br />
char<br />
<br />
key[]=“secret!!!” <br />
<br />
• Lưu <br />
ý <br />
về <br />
tính <br />
“endian” <br />
của <br />
máy <br />
thực <br />
hiện <br />
mã <br />
hóa. <br />
<br />
<br />
57 <br />
<br />
<br />
4.2 <br />
Chuyển <br />
đổi <br />
chuỗi <br />
hexa <br />
và <br />
khóa <br />
nhị <br />
<br />
phân <br />
<br />
<br />
• Chuyển <br />
đổi <br />
khóa <br />
nhị <br />
phân <br />
sang <br />
dạng <br />
chuỗi <br />
chữ <br />
số <br />
hexa <br />
<br />
<br />
#define <br />
MAX_KEY_LEN<br />
<br />
32 <br />
<br />
<br />
<br />
<br />
<br />
<br />
unsigned <br />
char <br />
key[MAX_KEY_LEN]; <br />
<br />
<br />
char<br />
<br />
<br />
result[MAX_KEY_LEN*2+1]; <br />
<br />
<br />
for <br />
(int <br />
i=0;i