首页 > 其他分享 > Rust库学习-cipher(简单使用)

Rust库学习-cipher(简单使用)

时间:2022-11-17 21:24:06浏览次数:59  
标签:base64 学习 println cipher let Rust test block

介绍

cipherRust的一个密码库

实践

Cargo.toml

[dependencies]
aes = "0.8.2"
base64 = "0.13.1"
cipher = "0.4.3"

main.rs

use aes::cipher::{generic_array::GenericArray, BlockEncrypt, KeyInit,BlockDecrypt};
use aes::Aes128;
fn main() {
    let test = "0000000000000000";
    let test = test.as_bytes();

    println!("test: {:?}", test);

    let key = GenericArray::from([48u8; 16]);
    let mut block = GenericArray::from([48u8; 16]);
    // Initialize cipher
    let cipher = Aes128::new(&key);
    // Encrypt block in-place
    println!("明文: {:?}", block);
    cipher.encrypt_block(&mut block);
    println!("密文: {:?}", base64::encode(block));

    cipher.decrypt_block(&mut block);
    println!("明文: {:?}", std::str::from_utf8(&block));
}

总结

一开始以为 0u8 指的是u8类型的0值,其实0u8对应的是ASCII中的NULL,因此怎么测都不对.同时因为第一次接触u8这个类型,网上大多的实例都是转hex,打印出来的值也让人困惑.

在发现数字0对应的ASCII应该是48时,才恍然大悟.同时把加密后的u8值转成base64.这可能比转成hex更容易看一点.

加密后的值是可能不是UTF8的字符,std::str::from_ut8,并不能打印出能让人看的字符,因此转成hex或者base64,容易让人理解.

解密后,变成UTF8编码的0值(UTF80值和ASCII一样的),就可以正常转回熟知的值了

测试

输出
验证

标签:base64,学习,println,cipher,let,Rust,test,block
From: https://www.cnblogs.com/blackTree/p/16900995.html

相关文章

  • 面向高效网络渗透测试的强化学习
    一、本文的贡献本文提出并且评估了一个基于人工智能的PT系统————IAPTS,系统利用RL技术来学习和再现PT活动。该模块集成了工业框架,能够在未来类似的测试用例中捕获信息......
  • 【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办
    问题描述当AzureWebApp进行安全扫描后,发现依旧支持很多弱TLS加密套件(WeakTLSCiphersSuite),那么是否有办法来关闭这些弱的加密套件呢?在WindowsIIS环境中,可以通过......
  • 2022-2023-1 20221420《计算机基础与程序设计》第十二周学习总结
    作业信息这个作业属于哪个课程:这个作业的要求在:2022-2023-1《计算机基础与程序设计》教学进程-娄老师-博客园(cnblogs.com)这个作业的目标:《C语言程序设计》第......
  • JDBC学习总结
    首先需要导包importjava.sql.*数据库的操作在写JDBC时需要抛出相应的异常或在用try方法抓住异常加载驱动Class.forName("com.mysql.jdbc.Driver");//5.0争取旧版......
  • 深度学习框架中的“自动求导”原理是什么?
        =======================================================  参考:深度学习框架——自动求导......
  • aws-学习
    https://www.stacksimplify.com/aws-eks/microservices-on-aws-eks/learn-to-deploy-microservices-on-aws-eks/https://www.iloveaws.cn/......
  • 第十二周学习笔记
    MySQL数据库系统本章讨论了MySQL关系数据库系统;介绍了MySQL并指出了它的重要性;展示了如何在Linux机器上安装和运行MySQL;演示了如何使用MySQL在命令模式和批处理模式下......
  • c#线程学习之ManualResetEvent和AutoResetEvent的区别!
    转自:https://www.cnblogs.com/jicheng/articles/5998244.html在讨论这个问题之前,我们先了解这样一种观点,线程之间的通信是通过发信号来进行沟通的。(这不是废话)   ......
  • 声网深度学习时序编码器的资源预测实践丨Dev for Dev 专栏
    本文为「DevforDev专栏」系列内容,作者为声网大后端智能运营算法团队算法工程师@黄南薰。随着深度学习技术的发展,编码器的结构在构建神经网络中成为了热门之选,在计算......
  • yii框架学习记录
    事务回滚M()->startTrans();//开启事务M()->commit();//提交事务M()->rollback();//回滚D('Agent')->getAgentInfo();//D表示model层I("")//获取请求参数......