是否有使用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>
答案 0 :(得分:6)
这些是未加密密码的SHA1哈希值。
f4a69973e7b0bf9d160f9f60e3c3acd2494beb0d
是Passw0rd!
的SHA1哈希。
我能够使用a rainbow table service反转其中一个哈希,这表明没有salting的密码哈希是非常不安全的。
在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版本,请查看first google hit for "sha1 java"。
答案 1 :(得分:1)
至于哈希算法,你需要一个cryptographic hash function,这是一个哈希函数(无论出于所有意图和目的)都无法反转。还要注意存在的文件(实际上是网站)努力计算每个字符串的每个哈希码并发布这些所谓的Rainbow Tables。 ( SHA256 对我来说似乎是个不错的选择。)
至于程序化生成,请查看.NET中的System.Security.Cryptography。
至于创建哈希的工具,我知道Windows没有任何附带功能。显然,您可以通过Cygwin(或类似工具)使用GNU工具,或者搜索您选择的算法的命令行工具。
答案 2 :(得分:1)
Cygwin for Windows在其coreutils包中提供了命令行哈希工具,例如sha1sum
,可以轻松为您计算哈希值。 Bouncy Castle库将提供Java和.NET中最常见的哈希算法的实现。
示例XML并没有多说。字符串是十六进制,长度为40个字符,即20个字节或160位。这可能意味着它是SHA-1(160位)但不一定。另外,它是如何从密码生成哈希的。是密码明文,明文加盐,明文和其他哈希等等。我猜你是先从命令行安装sha1sum,你可以看看如果你输入密码会发生什么。你可能会很幸运并发现它在做什么。然后你可以继续使用Bouncy Castle编写等效代码。