xmu_health_report_rust_sdk/reporter/
encrypt.rs1use aes::Aes128;
2use base64::encode;
3use block_modes::{BlockMode, Cbc};
4use block_modes::block_padding::Pkcs7;
5use rand::Rng;
6use regex::Regex;
7
8type AesCbc = Cbc<Aes128, Pkcs7>;
9
10const CHARSET: &str = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";
11
12pub fn rand_str(len: i32) -> String {
13 let mut res = String::new();
14 let charset: Vec<char> = CHARSET.chars().collect();
15 let charset_length = charset.len();
16 for _i in 0..len {
17 let index = rand::thread_rng().gen_range(0..charset_length);
18 res += &charset[index as usize].to_string();
19 }
20 res
21}
22
23pub fn gas<'a>(data: &'a str, key: &'a str, iv: &'a str) -> String {
24 let reg = Regex::new(r"(^\s+)|(\s+$)").unwrap();
25 let trimed_key = reg.replace_all(key, "");
26
27 let cipher = AesCbc::new_from_slices(trimed_key.as_bytes(), iv.as_bytes()).unwrap();
28 let cipher_text = cipher.encrypt_vec(data.as_bytes());
29 let result = encode(cipher_text);
30
31 result
32}
33
34pub fn encrypt_aes_cbc<'a>(data: &'a str, p1: &'a str) -> String {
36 if p1.len() == 0 {
37 return data.to_owned();
38 }
39 let data = rand_str(64) + data;
40 let iv = rand_str(16);
41 let result = gas(&data, p1, &iv);
42
43 result
44}