br-crypto 0.4.8

This is an crypto
Documentation
use hmac::{Hmac, Mac};
use sha1::Sha1;
use sha1::Digest;
use std::fmt::Write;
use base64::Engine;
use base64::engine::general_purpose::STANDARD;

type Hmac1 = Hmac<Sha1>;

/// 加密
pub fn encrypt_hex(data: &[u8]) -> String {
    let mut hasher = Sha1::new();
    hasher.update(data);
    let result = hasher.finalize();
    format!("{result:x}")
}
/// 加密
pub fn encrypt_base64(data: &[u8]) -> String {
    let mut hasher = Sha1::new();
    hasher.update(data);
    let result = hasher.finalize();
    STANDARD.encode(result)
}
/// SHA1
pub fn encrypt_hmac(key: &str, data: &[u8]) -> String {
    let mut mac = Hmac1::new_from_slice(key.as_bytes()).expect("HMAC can take key of any size");
    mac.update(data);
    let result = mac.finalize();
    let code = result.into_bytes();
    let mut contents = String::with_capacity(code.len() * 2); // 预先分配足够的空间
    for &byte in &code {
        write!(&mut contents, "{byte:02x}").expect("Unable to write");
    }
    contents
}

/// SHA1
pub fn encrypt_hmac_byte(key: &str, data: &[u8]) -> Vec<u8> {
    let mut mac = Hmac1::new_from_slice(key.as_bytes()).expect("HMAC can take key of any size");
    mac.update(data);
    let result = mac.finalize();
    let code = result.into_bytes();
    code.to_vec()
}
#[test]
fn tests() {
    let data = encrypt_hex(b"1");
    assert_eq!("356a192b7913b04c54574d18c28d46e6395428ab", data);
    let data = encrypt_hmac("1", b"1");
    assert_eq!("5b0c157d4e7672444c41033561554839ed1fd2d6", data);
    let data = encrypt_hmac_byte("1", b"1");
    let md5 = hex::decode("5b0c157d4e7672444c41033561554839ed1fd2d6").unwrap();
    assert_eq!(md5, data);
}