介绍
cipher
是Rust
的一个密码库
实践
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
值(UTF8
中0
值和ASCII
一样的),就可以正常转回熟知的值了
测试