cloud_disk_sync/utils/
crypto.rs

1pub fn generate_recovery_code(key: &[u8]) -> String {
2    use sha2::{Digest, Sha256};
3
4    // 计算密钥哈希
5    let mut hasher = Sha256::new();
6    hasher.update(key);
7    let hash = hasher.finalize();
8
9    // 转换为单词列表(便于记忆)
10    let wordlist = vec![
11        "alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", "hotel", "india",
12        "juliet", "kilo", "lima", "mike", "november", "oscar", "papa", "quebec", "romeo", "sierra",
13        "tango", "uniform", "victor", "whiskey", "xray", "yankee", "zulu", "zero", "one", "two",
14        "three", "four", "five", "six", "seven", "eight", "nine",
15    ];
16
17    let mut words = Vec::new();
18    for chunk in hash.chunks(2) {
19        let index = ((chunk[0] as usize) << 8 | chunk[1] as usize) % wordlist.len();
20        words.push(wordlist[index]);
21    }
22
23    // 取前8个单词
24    words[..8].join("-")
25}