C# 是否有使用Microsoft生成密码哈希的标准方法?

C# 是否有使用Microsoft生成密码哈希的标准方法?,c#,java,visual-c++,hash,passwords,C#,Java,Visual C++,Hash,Passwords,是否有使用Microsoft开发工具生成密码哈希的标准方法? 或者可能有最常见的方法。(我读到有MD5,STA1) 不幸的是,我没有服务器的源代码,但必须使用SOAP web服务。 必须使用某种算法来生成哈希代码。我需要使用Java或一些库来实现它 这是我需要发送到服务器的SOAP请求的一部分。看看oldPasswordHash - <ChangePassword xmlns="urn:____________"> <sessionGUID>{864da5f3-21b

是否有使用Microsoft开发工具生成密码哈希的标准方法? 或者可能有最常见的方法。(我读到有MD5,STA1)

不幸的是,我没有服务器的源代码,但必须使用SOAP web服务。 必须使用某种算法来生成哈希代码。我需要使用Java或一些库来实现它

这是我需要发送到服务器的SOAP请求的一部分。看看oldPasswordHash

- <ChangePassword xmlns="urn:____________">
  <sessionGUID>{864da5f3-21b6-486a-8bd3-c507ae3d224e}</sessionGUID> 
  <oldPasswordHash>089ad55bd0a8f6d3c2e2bbf0e4e1475c7e984ef1</oldPasswordHash> 
  <newPasswordHash>f4a69973e7b0bf9d160f9f60e3c3acd2494beb0d</newPasswordHash> 
  </ChangePassword>
-
{864da5f3-21b6-486a-8bd3-c507ae3d224e}
089ad55bd0a8f6d3c2e2bbf0e4e1475c7e984ef1
F4A69973E7B0BF9D160F9F60E3C3ACD2494B0D

至于散列算法,您需要一个,这是一个(出于所有目的)不可能反转的散列函数。还要注意的是,有一些文件(甚至网站)努力计算每个字符串的每个哈希代码,并发布这些所谓的。(我觉得SHA256是个不错的选择。)

至于编程生成,请查看.NET中的


至于创建哈希的工具,我不知道Windows附带什么。显然,您可以通过Cygwin(或类似工具)使用GNU工具,或者为您选择的算法搜索命令行工具。

Cygwin for windows在其coreutils包中提供了命令行散列工具,如
sha1sum
,可以方便地为您计算散列。这些库将提供Java和.NET中最常见的哈希算法的实现


示例XML没有说明太多。字符串为十六进制,长度为40个字符,即20字节或160位。这可能意味着它是SHA-1(160位),但不一定。此外,它是如何从密码生成哈希的。密码是明文,明文中有一些盐,明文中有一些其他的散列等等。我想如果您首先从命令行安装sha1sum,您可以看到如果您将密码输入其中会发生什么。你可能会幸运地发现它在做什么。然后,您可以继续使用Bouncy Castle对等价密码进行编码。

这些是未加密密码的SHA1哈希

f4a69973e7b0bf9d160f9f60e3c3acd2494beb0d
Passw0rd的SHA1散列

事实上,我能够用反转其中一个哈希值,这表明在没有盐分的情况下对密码进行哈希是非常不安全的

在C#中,您可以像这样复制实现:

public static string Hash(string value)
{
   var sha = new System.Security.Cryptography.SHA1CryptoServiceProvider();
   byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(value));
   return BytesToHex(hash).ToLower();
}

private static string BytesToHex(byte[] bytes)
{
   return String.Concat(Array.ConvertAll(bytes, x => x.ToString("X2")));
}

对于java版本,请查看。

这看起来像一个SHA1散列。只是猜测。除非你有一个旧的JRE,否则你不需要弹性城堡。较新版本的Java包含一个像样的JCE实现。