dev_tool/
secure_util.rs

1// 加解密工具
2use base64::{prelude::BASE64_STANDARD, Engine, DecodeError};
3use hmac::{Hmac, Mac};
4use sha1::{Sha1, Digest};
5
6pub struct SecureUtil;
7
8impl SecureUtil {
9
10    /// base64编码
11    pub fn base64_encode(bytes: &[u8]) -> String {
12        BASE64_STANDARD.encode(bytes)
13    }
14
15    /// base64解码
16    pub fn base64_decode(base64_str: &str) -> Result<Vec<u8>, DecodeError> {
17        BASE64_STANDARD.decode(base64_str)
18    }
19
20    /// hmac-sha1
21    pub fn hmac_sha1(data: &[u8], key: &str) -> Vec<u8> {
22        let key = key.as_bytes();
23        let mut hmac = Hmac::<Sha1>::new_from_slice(key).expect("HMAC can take key of any size");
24        hmac.update(data);
25        let result = hmac.finalize();
26        let hmac_bytes = result.into_bytes();
27        hmac_bytes.to_vec()
28    }
29
30    pub fn to_md5_str(bytes: &[u8]) -> String {
31        let data_md5 = md5::compute(bytes);
32        let md5_string = format!("{:x}", data_md5);
33        md5_string
34    }
35
36    pub fn to_md5(bytes: &[u8]) -> Vec<u8> {
37        let data_md5 = md5::compute(bytes).to_vec();
38        data_md5
39    }
40
41
42}
43
44
45#[cfg(test)]
46mod tests {
47
48    use super::*;
49
50    #[test]
51    fn test_base64() {
52        let bytes = "hello, rust!".as_bytes();
53        let base64_str = SecureUtil::base64_encode(bytes);
54        println!("{}", base64_str);
55
56    }
57}