CryptDecode
Thực hiện chuyển đổi ngược lại của dữ liệu từ mảng, đã được chuyển đổi bởi CryptEncode()
.
cpp
int CryptEncode(
ENUM..CRYPT..METHOD method, // phương pháp
const uchar& data[], // mảng nguồn
const uchar& key[], // khóa
uchar& result[] // mảng đích
);
1
2
3
4
5
6
2
3
4
5
6
Tham số
method
[truyền vào] Phương pháp chuyển đổi dữ liệu. Có thể là một trong những giá trị của bảng liệt kê ENUM..CRYPT..METHOD
.
data[]
[truyền vào] Mảng nguồn.
key[]
[truyền vào] Mảng khóa.
result[]
[truyền ra] Mảng đích.
Giá trị trả về
Số byte trong mảng đích hoặc 0 trong trường hợp lỗi. Để lấy thông tin về lỗi, hãy gọi hàm GetLastError()
.
Ví dụ:
cpp
input string InpKey = "ABCDEFG"; // Khóa mã hóa
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
string text="The quick brown fox jumps over the lazy dog";
uchar src[],dst[],key[];
//--- chuẩn bị khóa mã hóa
StringToCharArray(InpKey,key);
//--- chuẩn bị mảng nguồn src[]
StringToCharArray(text,src);
//--- hiển thị dữ liệu nguồn
PrintFormat("Dữ liệu ban đầu: kích thước=%d, chuỗi='%s'",ArraySize(src),CharArrayToString(src));
//--- mã hóa mảng src[] bằng phương pháp DES với khóa 56-bit key[]
int res=CryptEncode(CRYPT..DES,src,key,dst);
//--- kiểm tra kết quả mã hóa
if(res>0)
{
//--- hiển thị dữ liệu đã mã hóa
PrintFormat("Dữ liệu đã mã hóa: kích thước=%d %s",res,ArrayToHex(dst));
//--- giải mã dữ liệu mảng dst[] bằng phương pháp DES với khóa 56-bit key[]
res=CryptDecode(CRYPT..DES,dst,key,src);
//--- kiểm tra kết quả
if(res>0)
{
//--- hiển thị dữ liệu đã giải mã
PrintFormat("Dữ liệu đã giải mã: kích thước=%d, chuỗi='%s'",ArraySize(src),CharArrayToString(src));
}
else
Print("CryptDecode thất bại. Lỗi: ",GetLastError());
}
else
Print("CryptEncode thất bại. Lỗi: ",GetLastError());
}
//+------------------------------------------------------------------+
//| ArrayToHex |
//+------------------------------------------------------------------+
string ArrayToHex(uchar &arr[],int count=-1)
{
string res="";
//--- kiểm tra kích thước
if(count<0 || count>ArraySize(arr))
count=ArraySize(arr);
//--- chuyển đổi sang chuỗi thập lục phân
for(int i=0; i<count; i++)
res+=StringFormat("%.2X",arr[i]);
return(res);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Xem thêm