Rust: AES 加密算法库
在Rust中,进行AES加密通常会用到一些现有的库,因为Rust标准库中并不直接提供AES加密的API。一个非常流行的库是crypto-box或者更广泛使用的ring库,但ring库由于依赖问题有时可能难以编译,另一个常用的库是cryptography的Rust绑定,但直接支持AES的常用库是crypto(注意,crypto库已标记为不再维护,但仍有大量项目在使用)或更现代的crypto-rs/aes。
这里,我将给出一个使用crypto-rs/aes库进行AES加密的示例。首先,你需要添加aes和cipher作为你的项目依赖。在你的Cargo.toml文件中添加:
[dependencies]
aes = "0.7"
cipher = "0.6"
请注意,版本号可能会随着时间推移而更新,请查看最新的crates.io信息。
接下来,这是一个简单的AES加密和解密的示例代码:
extern crate aes;
extern crate cipher;use aes::Aes128;
use cipher::stream::cipher_mode::Cbc;
use cipher::stream::cipher_mode::sync::SyncStreamCipher;
use std::io::Read;fn main() {// AES 密钥需要是16(AES-128)、24(AES-192)或32(AES-256)字节长let key = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,];// 初始化向量(IV)也需要与密钥相同的长度或密钥长度的一半(取决于模式)let iv = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,];// 创建一个AES CBC模式的加密器let cipher = Aes128::new(key).unwrap();let mut enc_cipher = Cbc::new_from_slices(cipher, &iv).unwrap();// 待加密的数据let plaintext = b"Hello, AES!";// 加密let mut ciphertext = Vec::new();enc_cipher.apply_pkcs7_padding();enc_cipher.process(plaintext).read_to_end(&mut ciphertext).unwrap();// 创建一个解密器let mut dec_cipher = Cbc::new_from_slices(cipher, &iv).unwrap();dec_cipher.apply_pkcs7_padding();// 解密let mut decryptedtext = Vec::new();dec_cipher.process(&ciphertext).read_to_end(&mut decryptedtext).unwrap();println!("Encrypted: {:?}", ciphertext);println!("Decrypted: {:?}", decryptedtext);
}
注意:
- 示例中使用了AES-128和CBC模式,并应用了PKCS#7填充来确保数据块大小正确。
- 密钥(
key)和初始化向量(iv)应该是随机生成的,并且密钥管理应该是安全的。 - 加密和解密过程都依赖于正确地设置加密模式和填充。
- 错误处理(如
unwrap())在生产代码中应更加健壮,这里为简单起见使用了unwrap()。
使用这些代码,你可以开始在你的Rust项目中实现AES加密。确保你理解每个步骤的安全性和性能影响。
相关文章:
Rust: AES 加密算法库
在Rust中,进行AES加密通常会用到一些现有的库,因为Rust标准库中并不直接提供AES加密的API。一个非常流行的库是crypto-box或者更广泛使用的ring库,但ring库由于依赖问题有时可能难以编译,另一个常用的库是cryptography的Rust绑定&…...
计算机网络34——Windows内存管理
1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片,在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片,动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …...
Redisson 总结
1. 基础使用 1.1 引入依赖 <dependencies><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId></dependency> </dependencies>包含的依赖如下 1.2 配置文件 其实默认主机就…...
EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(一)
摘要 EfficientFormerV2是一种通过重新思考ViT设计选择和引入细粒度联合搜索策略而开发出的新型移动视觉骨干网络。它结合了卷积和变换器的优势,通过一系列高效的设计改进和搜索方法,实现了在移动设备上既轻又快且保持高性能的目标。这一成果为在资源受…...
文心智能体搭建步骤
通过使用文心智能体平台来创建智能体的过程。这种方法可以让没有编程经验的人也能快速构建智能体,降低了技 术门槛。以下是一些建议和心得: 1.选择合适的平台:文心智能体平台是一个优秀的选择,它提供了零代码和低代码的开发环境,极大地降低了…...
PHP安全
PHP伪协议: 一.【file://协议】 PHP.ini: file:// 协议在双off的情况下也可以正常使用; allow_url_fopen :off/on allow_url_include:off/on file:// 用于访问本地文件系统,在CTF中通常用来读取本地文…...
c++278函数指针
#define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<string.h> #include<stdio.h>//数组类型基本语法知识梳理 //定义一个数组类型 //int a[10];//定义一个指针数组类型//定义一个指向数组类型的指针 数组类型的指针void main() {int a[10];//a代…...
sklearn特征选取之SelectFromModel
sklearn.feature_selection.SelectFromModel 是一种基于模型的重要性权重进行特征选择的工具,允许我们根据学习器的权重或特征重要性自动选择特征。它通过从模型中提取特征的重要性来选择特征,常用于与那些具有 coef_ 或 feature_importances_ 属性的模型…...
vue一级、二级路由设计
一、一级路由设计 一级路由是指直接映射到应用程序中顶级页面或组件的路由。这些路由通常定义在Vue Router的配置中,作为应用程序导航结构的基础。 直接映射:一级路由直接映射到URL路径和Vue组件,没有嵌套关系。顶级导航:它们通…...
python爬虫:将知乎专栏文章转为pdf
欢迎关注本人的知乎主页~ 实现思路 用户输入专栏ID: 代码首先提示用户输入一个知乎专栏的ID,默认值为 c_1747690982282477569。输入的ID用于构建API请求的URL。 发送HTTP请求: 使用 requests.get() 向知乎API发送GET请求,获取指定…...
嵌入式笔记(入门系列2)
目录 宏函数 预处理器#include 内存泄漏 内存对齐 堆与栈 Malloc 和 New Inline 宏函数 宏函数,宏函数,实际上就是让宏像函数一样被使用。宏函数以函数形式的方式进行入参,但是返回结果是通过表达式求值得到。话说的抽象,我…...
并发编程多线程
1.线程和进程的区别? 进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间线程更轻量,线程上下文切换成本一般上要比进程上下文…...
【十八】MySQL 8.0 新特性
MySQL 8.0 新特性 目录 MySQL 8.0 新特性 概述 简述 1、数据字典 2、原子数据定义语句 3、升级过程 4、会话重用 5、安全和账户管理 6、资源管理 7、表加密管理 8、InnoDB增强功能 9、字符集支持 10、增强JSON功能 11、数据类型的支持 12、查询的优化 13、公用…...
巨潮股票爬虫逆向
目标网站 aHR0cDovL3dlYmFwaS5jbmluZm8uY29tLmNuLyMvSVBPTGlzdD9tYXJrZXQ9c3o 一、抓包分析 请求头参数加密 二、逆向分析 下xhr断点 参数生成位置 发现是AES加密,不过是混淆的,但并不影响咱们扣代码 文章仅提供技术交流学习,不可对目标服…...
传知代码-从零开始构建你的第一个神经网络
代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 从零开始构建你的第一个神经网络 在本教程中,我们将使用PyTorch框架从零开始构建一个简单的卷积神经网络(CNN),用于图片二分类任务。CNN 是一种深度学习模型&#…...
大厂面试真题:SpringBoot的核心注解
其实理解一个注解就行了@SpringBootApplication,我们的启动类其实就加了这一个 但是这么答也不行,因为面试官要的答案肯定不止这一个 我们打开SpringBootApplication的源码,会发现上面加了一堆的注解 相对而言比较重要是下面三个…...
Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)
文章目录 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.5 迪米特法则(DP) 迪米特法则:Demeter Principle,简称DP 3.5.1 概述 只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to stranger…...
docker多阶段镜像制作,比如nginx镜像,编译+制作
镜像制作, nginx的源码包 把nginx源码拷贝到容器内 编译要用到gcc make , 以及扩展工具 pcre openssl # "pcre" perl compatibal regulaer expression 刚开始,可以两个终端, 一个手工操作(编译安装、拷贝、环境变量等)…...
大语言模型量化方法GPTQ、GGUF、AWQ详细原理
大语言模型量化的目的是减少模型的计算资源需求和存储占用,同时尽量保持模型的性能。以下是几种常见的量化方法的原理; 1. GPTQ (Gradient-based Post-training Quantization) GPTQ 是一种基于梯度的后训练量化方法,主要目的是在减少浮点计…...
《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现
摘要 本文深入探讨了 AVL 树(自平衡二叉搜索树)的概念、特点以及实现细节。我们首先介绍了 AVL 树的基本原理,并详细分析了其四种旋转操作,包括左旋、右旋、左右双旋和右左双旋,阐述了它们在保持树平衡中的重要作用。…...
HeidiSQL连接池管理终极指南:优化数据库性能的10个关键技巧
HeidiSQL连接池管理终极指南:优化数据库性能的10个关键技巧 【免费下载链接】HeidiSQL A lightweight client for managing MariaDB, MySQL, SQL Server, PostgreSQL, SQLite, Interbase and Firebird, written in Delphi and Lazarus/FreePascal 项目地址: https…...
5步掌控Windows Defender:开源工具实现永久安全策略定制
5步掌控Windows Defender:开源工具实现永久安全策略定制 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defender-control …...
3种方法彻底移除Windows Defender:释放系统性能,恢复完全控制权
3种方法彻底移除Windows Defender:释放系统性能,恢复完全控制权 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcod…...
SMUDebugTool终极指南:轻松解锁AMD Ryzen处理器的隐藏性能
SMUDebugTool终极指南:轻松解锁AMD Ryzen处理器的隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...
SEER‘S EYE模型学术应用:LaTeX论文写作辅助与公式校对
SEERS EYE模型学术应用:LaTeX论文写作辅助与公式校对 写论文,尤其是理工科的论文,最头疼的是什么?十有八九会提到LaTeX。从搭建文档结构、处理复杂的数学公式,到确保格式规范、检查符号一致性,每一步都可能…...
国标参考文献高效排版解决方案:零门槛工具助你轻松应对学术写作
国标参考文献高效排版解决方案:零门槛工具助你轻松应对学术写作 【免费下载链接】gbt7714-bibtex-style GB/T 7714-2015 BibTeX Style 项目地址: https://gitcode.com/gh_mirrors/gb/gbt7714-bibtex-style 1. 解决国标排版痛点的3个核心优势 学术写作中&…...
YOLO X Layout部署教程:CentOS 7离线环境安装ONNX Runtime 1.16兼容包
YOLO X Layout部署教程:CentOS 7离线环境安装ONNX Runtime 1.16兼容包 1. 引言 如果你正在CentOS 7服务器上部署YOLO X Layout文档理解模型,可能会遇到一个常见问题:系统自带的ONNX Runtime版本太旧,而YOLO X Layout需要1.16或更…...
SUNFLOWER MATCH LAB 效果深度评测:对比传统CNN与LSTM的识别性能
SUNFLOWER MATCH LAB 效果深度评测:对比传统CNN与LSTM的识别性能 向日葵的生长过程,就像一部无声的纪录片,每一天的叶片舒展、花盘转动都蕴含着丰富的信息。过去,我们想读懂这部纪录片,要么靠农学专家日复一日的田间观…...
告别printf调试:手把手教你用STM32F411的USART6重定向标准输入输出
STM32F411串口调试革命:USART6重定向实战指南 在嵌入式开发中,调试信息的输出是开发者最依赖的工具之一。传统调试方式往往需要复杂的硬件调试器或频繁烧录程序,效率低下且不够灵活。本文将带你探索一种高效、便捷的调试方案——通过STM32F4…...
S2-Pro可视化图表描述生成:替代Matlab和Visio的快速绘图方案
S2-Pro可视化图表描述生成:替代Matlab和Visio的快速绘图方案 1. 让数据可视化变得简单高效 还在为复杂的Matlab代码和繁琐的Visio操作头疼吗?S2-Pro的出现彻底改变了数据可视化的游戏规则。这个智能工具能将你的自然语言描述直接转化为专业图表&#x…...
