2个稳定版本

1.0.1 2021年12月9日

#7 in #passwd

Download history 638/week @ 2024-03-25 772/week @ 2024-04-01 581/week @ 2024-04-08 1053/week @ 2024-04-15 851/week @ 2024-04-22 717/week @ 2024-04-29 731/week @ 2024-05-06 619/week @ 2024-05-13 718/week @ 2024-05-20 809/week @ 2024-05-27 649/week @ 2024-06-03 455/week @ 2024-06-10 703/week @ 2024-06-17 744/week @ 2024-06-24 738/week @ 2024-07-01 689/week @ 2024-07-08

2,942 monthly downloads

BSD-3-Clause

16KB
248

Tor控制端口号密码加密和解密

Coverage Status

Tor可以通过与“ControlPort”建立套接字连接来控制,通常在端口9051。

.torrc需要“HashedControlPassword”选项来使用密码认证。您可以在命令行中运行tor --hash-password <secret>来生成此值。此模块提供了与独立Rust库相同的功能。

盐化哈希是根据RFC 2440(OpenPGP)中的S2K算法计算的,并带有s2k指定符前缀。然后以十六进制编码,前面带有指示序列“16:”。

例如,密码'foo'可以编码为

     16:660537E3E1CD4999 60 44A3BF558097A981F539FEA2F9DA662B4626C1C2
        ++++++++++++++++ ** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           salt       indicator     hashed value

示例用法

要生成Tor密码,请使用hash_password。您可以使用verify来验证对哈希的挑战

use tor_hash_passwd::EncryptedKey;

let hash = EncryptedKey::hash_password("ride the wild Pony");
assert!(hash.validate("ride the wild Pony"));
assert!(!hash.validate("some other password"));

算法使用随机盐,因此多次生成相同的哈希密码将产生不同的哈希。要获得可重复的哈希,您必须提供盐

use tor_hash_passwd::EncryptedKey;
use hex_literal::hex;

let key = EncryptedKey::hash_with_salt("foo", hex!("85EE955FF128F012"));
assert_eq!(key.to_string().as_str(), "16:85EE955FF128F01260A1CFA5C3BE947A512B8EFAD1BC410671E3DBBA2D");

您还可以将字符串转换为加密密钥

use std::convert::TryFrom;
use tor_hash_passwd::EncryptedKey;
let key = EncryptedKey::try_from("16:29AAD7BADA64895D604EE18A5549712C9DADAF373B72D7DEF0D4AE97AE").unwrap();
assert!(key.validate("tari"));

依赖项

~0.6–1.1MB
~24K SLoC