我正在为我的应用程序编写身份验证服务。客户端将通过 HTTP 连接到此身份验证服务以注册或连接。在他们连接后,他们会收到一个 sessionkey,他们可以使用加密的 TCP/UDP 数据包发送到辅助服务器。这仍然是 WIP,只是为了给你一个大局观。
服务器端,我使用 BCrypt 对传入的密码进行哈希处理。并将其存储在数据库中。在服务器端,我还使用 BCrypts 验证方法来检查任何带有存储哈希的传入密码。所以这基本上有效。
但是,我自然不想通过网络传输未散列的密码。Windows Store 应用程序没有 BCrypt,但我发现一些 MSDN 示例代码演示了如何使用新的 Cryptography API for Windows Store 应用程序来散列字符串,如下所示:
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 散列密码客户端,如上面的代码所示,在将其传输到服务器时“足够”(在存储之前再次对其进行散列和加盐)。