rust 写代码真的很复杂

147 天前
 RedBeanIce
```rust
use aes_gcm::{aead::{Aead, AeadCore, KeyInit, OsRng}, Aes256Gcm, AesGcm};
use aes_gcm::aead::consts::U12;
use aes_gcm::aead::Nonce;
use aes_gcm::aes::Aes256;

// aes-gcm = "0.10.3"

#[test]
fn test_3_aes256_cbc() {
// 生成一个随机的 AES256-GCM 加密密钥 key 。
// The encryption key can be generated randomly:
let key = Aes256Gcm::generate_key(OsRng);

// 使用生成的密钥 key 创建 AES256-GCM 加密器 cipher ,然后生成一个 96 位长度的随机 nonce nonce 。
// 使用 cipher 对 "plaintext message" 进行加密得到 ciphertext ,然后再对 ciphertext 进行解密得到 plaintext 。
// 最后使用 assert_eq! 宏来验证解密后的 plaintext 是否与原始消息相同。
let cipher: AesGcm<Aes256, U12> = Aes256Gcm::new(&key);
// 生成随机 nonce ( 96 bits )
// let nonce = GenericArray::from_slice(&Aes256Gcm::generate_nonce(&mut OsRng));
// let nonce: &GenericArray<u8, <Aes256Gcm as Aead>::NonceSize> = GenericArray::from_slice(&Aes256Gcm::generate_nonce(&mut OsRng));
// let nonce: GenericArray<u8, <Aes256Gcm as Aead>::NonceSize> = ...;
let nonce: Nonce<Aes256Gcm> = Aes256Gcm::generate_nonce(&mut OsRng); // 96-bits; unique per message

// 将明文消息作为字节数组传递给 encrypt 函数。
let plaintext: &[u8] = b"plaintext message";
let ciphertext = cipher.encrypt(&nonce, plaintext).unwrap();
let plaintext = cipher.decrypt(&nonce, ciphertext.as_ref()).unwrap();

assert_eq!(&plaintext, b"plaintext message");
}


```

let plaintext: &[u8] = b"plaintext message";

这一行代码,要自己将手动推导的 &[u8;17] 固定长度数组,,修改为可变数组。。

以及一些其他的,,整个代码才可以运行
2764 次点击
所在节点    Rust
5 条回复
chainal7777
147 天前
1 ,用点 use as
2 ,用点 type A=a
3 ,只写关键注释
RedBeanIce
147 天前
@chainal7777 请问第一点是什么意思呀,,,,‘’第二点我大概理解,就是将泛型定义变成单独的一行代码。
cppc
147 天前
为了安全是这样啦,我还见过编译时 SQL 检查呢,SQL 写错代码都不能编译
PTLin
146 天前
不是 rust 复杂,这个是库复杂,用了太多泛型了
whoami9894
126 天前
有没有可能,不用写那么多类型标注

另外,函数当然不可能接收 [u8; const N] 参数,难道你能在编译期知道数据长度?

```
let key = Aes256Gcm::generate_key(OsRng);
let cipher = Aes256Gcm::new(&key);
let nonce = Aes256Gcm::generate_nonce(OsRng);

let plaintext = b"plaintext message";
let ciphertext = cipher.encrypt(&nonce, plaintext.as_slice()).unwrap();
let plaintext = cipher.decrypt(&nonce, ciphertext.as_slice()).unwrap();

assert_eq!(&plaintext, b"plaintext message");
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1056062

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX