gpt4 book ai didi

c# - Windows 商店应用程序中的密码散列

转载 作者:行者123 更新时间:2023-11-30 18:36:07 27 4
gpt4 key购买 nike

我正在为我的应用程序编写身份验证服务。客户端将通过 HTTP 连接到此身份验证服务以进行注册或连接。连接后,他们将收到一个 session key ,他们可以使用加密的 TCP/UDP 数据包发送到辅助服务器。这仍然是 WIP,只是为了给您一个大的概览。

服务器端,我使用 BCrypt 来散列传入的密码。并将其存储在数据库中。在服务器端,我还使用 BCrypts Verify 方法使用存储的哈希检查任何传入的密码。这样基本上就可以了。

但是,我自然不想通过网络传输未经哈希处理的密码。没有适用于 Windows 应用商店应用程序的 BCrypt,但我找到了一些 MSDN 示例代码,演示了如何使用适用于 Windows 应用商店应用程序的新密码学 API 来散列字符串,如下所示:

    public static string Hash(string password)
{
HashAlgorithmProvider provider =
HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512);

CryptographicHash hash = provider.CreateHash();

IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf16BE);
hash.Append(buffer);
IBuffer hashedBuffer = hash.GetValueAndReset();

return CryptographicBuffer.EncodeToBase64String(hashedBuffer);
}

我计划让各种客户端连接到该服务,不仅是 Windows 应用商店应用(还有传统的 Windows 桌面应用)。所以很自然地我想要“一种”方式来散列密码客户端。

我需要关于我应该实现的其他安全机制的建议,如果使用 SHA512 对密码客户端进行哈希处理(如上面的代码所示)在将其传输到服务器时“足够”(在存储之前再次对其进行哈希处理和加盐)。

最佳答案

在没有 TLS 保护的情况下执行任何类型的身份验证会给您留下漏洞。 Bcrypt 服务器端可以为您提供有限的保护,以防止对被盗数据库的攻击。然而,通过线路发送不 protected (散列)密码应被视为安全风险。


至少应该可以向客户端引入一个salt和一个work factor。这些参数可以从服务器端检索,因为它们需要保持不变。然后你可以使用 brypt 客户端。你说它在 API 中不可用,但这不应该让你担心。 Bcrypt 只是一种算法,将会有在线可用的实现。

蛮力攻击和字典攻击仍然可供攻击者(窃听者)使用,但它们将更难完成,为具有中等强度密码的用户提供有限的保护(如果客户端代码可以信任)。

关于c# - Windows 商店应用程序中的密码散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14069739/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com