3 个不稳定版本
0.2.0 | 2023年1月11日 |
---|---|
0.1.1 | 2022年11月7日 |
0.1.0 | 2022年10月20日 |
#1268 in 加密学
每月 22 次下载
16KB
85 行
无聊天报告 (NCR) 加密
用于生成密码和加密消息的加密方式,与 Minecraft No-Chat-Reports Mod 中的方式完全相同。
示例
use ncr_encryption::{decrypt_with_passphrase, decode_and_verify};
let passphrase = b"secret"; // Setting in NCR
// "Hello, world!" sent as a message in chat:
let ciphertext = base64::decode("q2JCS/M3yMnz+MtXDn4dd6xyqN94Dao=").unwrap();
let decrypted = decrypt_with_passphrase(&ciphertext, passphrase);
let decoded = decode_and_verify(&decrypted);
assert_eq!(decoded, Ok("#%Hello, world!"))
工作原理
通过在 Github 上阅读源代码,可以清楚地了解 Mod 如何进行加密
- 您在 UI 中设置一个口令,如 "secret"
- Mod 使用
PBKDF2WithHmacSHA1
和硬编码的盐以及 65536 次迭代,将您的口令转换成 16 字节的哈希值。这个过程花费的时间最长 - 从随机 nonce 值生成一个初始化向量 (IV),并在后续的加密中使用
- 新的哈希值成为用于加密您发送的任何消息的密钥,使用
AES-CFB8
加密 - 从这种加密产生的密文附加到生成的 nonce 上,并通过聊天以 Base64 编码发送最终消息(注意:在加密前,将
"#%"
添加到消息前作为前缀)
解密过程非常相似,只是相反
- 将消息从 Base64 解码为原始字节
- 从消息中获取 nonce 并使用它再次生成 IV
- 再次从秘密口令生成哈希,并使用它作为 AES 加密的密钥
- 如果解密的消息以
"#%"
开头,则在聊天中打印其余部分为解密内容
Windows 性能
默认情况下,fastpbkdf2
不会为 Windows 编译,请参见此处
此 crate 在 Windows 上默认使用 ring
,这比 fastpbkdf2
慢,请参见此处
如果您关心性能,建议使用 Windows Subsystem for Linux。
依赖项
~0.8–4MB
~95K SLoC