首页 > 解决方案 > 锈打印!在某些情况下打印奇怪的字符

问题描述

我正在尝试编写一个简短的程序(足够短以至于它具有简单的主要功能)。首先,我应该在 cargo.toml 文件中列出依赖:

[dependencies]

passwords = {version = "3.1.3", features = ["crypto"]}

然后当我在 main.rs 中使用 crate 时:

extern crate passwords;

use passwords::hasher;

fn main() {
    let args: Vec<String> = std::env::args().collect();

    if args.len() < 2
    {
        println!("Error! Needed second argument to demonstrate BCrypt Hash!");
        return;
    }

    let password = args.get(1).expect("Expected second argument to exist!").trim();

    let hash_res = hasher::bcrypt(10, "This_is_salt", password);

    match hash_res
    {
        Err(_) => {println!("Failed to generate a hash!");},
        Ok(hash) => { 
            let str_hash = String::from_utf8_lossy(&hash);
            println!("Hash generated from password {} is {}", password, str_hash);
        }
    }
}

当我运行以下命令时出现问题:

$ target/debug/extern_crate.exe trooper1

这成为输出:

?sC�M����k��ed from password trooper1 is ���Ka .+:�

但是,此输入:

$ target/debug/extern_crate.exe trooper3

产生这个:

Hash generated from password trooper3 is ��;��l�ʙ�Y1�&gt;R��G�Ѡd

我对第二个输出很满意,但是 UTF-8 中是否存在可能导致输出语句的“哈希生成”部分被覆盖的内容?有没有我可以用来防止这种情况的代码?

注意:代码是在 Windows 10 的 Visual Studio Code 中开发的,并使用嵌入式 Git Bash 终端编译和运行。

PS:看了类似Rust println之类的问题!问题 - println 宏内部的奇怪行为以及从标准输入读取用户输入时为什么我的字符串不匹配?但这些问题似乎是新线的问题,我认为这不是问题所在。

标签: utf-8rustbcryptprintln

解决方案


您可以在打印之前将哈希转换为十六进制以防止这种情况发生


推荐阅读