rust aes256加密 为什么 加密结果无法输出字符串?

[dependencies]

aes = "0.8.2"
ecb = "0.1.1"

use aes::cipher::{block_padding::Pkcs7, BlockDecryptMut, BlockEncryptMut, KeyInit};
type Aes256CbcEnc = ecb::Encryptor<aes::Aes256>;
type Aes256CbcDec = ecb::Decryptor<aes::Aes256>;

// const KEY: &[u8; 16] = b"abcdedghijklmnop"; // 模拟密钥,请勿在实际程序中使用
const key: &[u8; 32] = b"ec3d170007120634a792c6c7b694e336";

/// 加密
pub fn encrypt(plain: &[u8]) -> Vec<u8> {
    // 随机值
    let mut buf = [0u8; 48];
    let pt_len = plain.len();
    buf[..pt_len].copy_from_slice(plain);
    let ct = Aes256CbcEnc::new(key.into())
        .encrypt_padded_b2b_mut::<Pkcs7>(plain, &mut buf)
        .unwrap();

    ct.to_vec()
}

/// 解密
pub fn decrypt(cipher: &[u8]) -> Vec<u8> {
    let cipher_len = cipher.len();
    let mut buf = [0u8; 48];
    buf[..cipher_len].copy_from_slice(cipher);

    let pt = Aes256CbcDec::new(key.into())
        .decrypt_padded_b2b_mut::<Pkcs7>(cipher, &mut buf)
        .unwrap();

    pt.to_vec()
}

fn main() {
    // 账号密码应为单向加密,参考:https://github.com/RustCrypto/password-hashes
    // 这里的示例代码应用来加密如手机号、身份证号、银行卡号等涉及用户隐私的数据

    let plain = b"admin";
    let ct = encrypt(plain);
    let ct2 = ct.clone();
    println!("加密结果{:?}", String::from_utf8(ct2));
//加密结果Err(FromUtf8Error { bytes: [225, 51, 115, 113, 36, 252, 95, 73, 227, 166, 134, 32, 50, 140, 248, 43], error: Utf8Error { valid_up_to: 0, error_len: Some(1) } })

    // let text = "4TNzcST8X0njpoYgMoz4Kw==".as_bytes().to_vec();
    let pt = decrypt(&ct);
    println!("解密结果:{:?}", String::from_utf8(pt));
//解密结果:Ok("admin")
}
50 声望
1 粉丝
0 条评论
推荐阅读
antd-vue 动态select回显时错误的处理方法
我的解决方法就是改源码:antd-vue 版本 ^1.7.8源码位置 node_modules\ant-design-vue\es\vc-select\Select.js左右getDerivedState方法中200行左右

赫特莫勒阅读 402

文盘Rust -- 用Tokio实现简易任务池
Tokio 无疑是 Rust 世界中最优秀的异步Runtime实现。非阻塞的特性带来了优异的性能,但是在实际的开发中我们往往需要在某些情况下阻塞任务来实现某些功能。

京东云开发者1阅读 979

封面图
4.8 Beijing Rust Meetup | Call For Presenters
如果你有兴趣参与探讨Rust作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于Rust编程语言相关...

Datenlord阅读 1.4k

封面图
常用Linux系统命令、vim编辑命令汇总(看一遍用时候来查)
Linux操作基本操作pwd命令作用:显示当前工作目录用法:pwdcd命令作用:改变目录位置用法:cd [option] [dir]cd 目录路径 -进入指定目录cd .. -返回父目录cd / -进入根目录cd或cd ~ -进入用户主目录ls命令用法:l...

笑忘书阅读 1.1k

倒计时3天 I 4.8 Beijing Rust Meetup
对Rust编程语言感兴趣的你准备好相聚进行一场头脑风暴了吗?赶快预约报名参与本周六下午的线下Meetup。一起和来自达坦科技、南京大学、CloudWeGo、华为等的技术专家来探讨Rust作为一种强调性能、安全和并发性的编...

Datenlord阅读 1.1k

封面图
使用rust开发android底层
本文档使用rust开发android程序,只涉及到底层开发,不涉及任何ui相关,开发前推荐安装好magisk框架,方便后面获取手机root权限,或者有别的方案可以使adb获取到root权限也行

龚正阳阅读 1k

精彩回顾|4.8 Beijing Rust Meetup
2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust X的meetup。开发者们不仅线下积极报名参与,更在线上直播中踊跃参与互动,一起探讨Rust作为一种强调性能、安全和并发性的编程...

Datenlord阅读 1k

封面图
50 声望
1 粉丝
宣传栏