br-crypto 0.4.8

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

type Hmac256 = Hmac<Sha256>;

/// 加密
pub fn encrypt_hex(data: &[u8]) -> String {
    let mut hasher = Sha256::new();
    hasher.update(data);
    hex::encode(hasher.finalize())
}
/// 加密
pub fn encrypt_byte(data: &[u8]) -> Vec<u8> {
    let digest = Sha256::digest(data);
    digest.to_vec()
}
/// base64 转 sha 256
pub fn encrypt_base64(data: &[u8]) -> String {
    let mut hasher = Sha256::new();
    hasher.update(data);
    let digest = hasher.finalize();
    general_purpose::STANDARD.encode(digest)
}
/// SHA256
pub fn encrypt_hmac(key: &str, data: &[u8]) -> String {
    let mut mac = Hmac256::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
}
/// SHA256
pub fn encrypt_hmac_hex(key: &str, data: &[u8]) -> String {
    let mut mac = Hmac256::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();
    hex::encode(code)
}
pub fn encrypt_hmac_byte(key: &str, data: &[u8]) -> Vec<u8> {
    let mut mac = Hmac256::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!("6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", data);

    let data = encrypt_base64(b"1");
    assert_eq!("a4ayc/80/OGda4BO/1o/V0etpOqiLx1JwB5S3beHW0s=", data);

    let data = encrypt_hmac("1", b"1");
    assert_eq!("6ff6ceedb1c100266849d7e4e13449c98d1c98e569994f8ddbfe7b52e780dead", data);

    let data = encrypt_hmac_byte("1", b"1");
    let md5 = hex::decode("6ff6ceedb1c100266849d7e4e13449c98d1c98e569994f8ddbfe7b52e780dead").unwrap();
    assert_eq!(md5, data);

    let data = encrypt_byte(b"1");
    println!("body:\n{data:?}");

    // 模拟报文体
    let body = br#"{"orderId":12345,"amount":99.9}"#;
    println!("body:\n{body:?}");
}