2014-02-25 32 views
1

我有一个使用ASP.NET 2.0构建的遗留Web应用程序。在此应用程序中实现了一个用户注册过程,用户名和密码存储在SQL Server数据库中。密码按照预期进行散列处理。虽然我不是一个非常有经验的.NET程序员,但我猜测System.Security.Cryptography程序集可以完成这项工作。哪种散列算法可以使用.NET,我可以使用java对这些散列执行密码检查

现在我们希望重用这个用户数据库用于其他服务(基本上SAML Identity Proider将是理想的)。我想使用Mule ESB和Java Code的组合来做到这一点,但是我是否有机会像使用.NET一样在Java中散列密码并在我的用户数据库中检查这个散列?有没有人做过这个?

编辑:我已经进一步调查了旧版应用程序。我使用密码“stackoverflow”创建了一个'Testuser'。在数据库中,我有两个字段,一个名为“Password”,一个名称为“EncryptionToken”。

对于上面 '计算器' 的凭据变得

密码:F545C9A2670C9C261C657CC48AA8F91F284DD824B8142466DB7370FF4A30D741 SecurityToken:TN + nms4 =

以用于存留用户密码的代码看起来是这样的:

public void SetEncryptedPassword(Account user, string password) 
{ 
    user.SecurityToken = CryptoProviderBase.GenerateRandomSalt(); 
    var hash = new SHA256HashBuilder { Text = password, Salt = user.SecurityToken }; 
     user.Password = hash.CalculateHash(); 
} 

所以哈希似乎是一个随机盐SHA256哈希是存储在SecurityToken中。

不幸的是,我不能(不知道)如何在Java中重现这一点。你能给我一些提示吗?

+0

你需要找出.NET使用的加密算法。但是,在java中很难解密。 – Ved

+0

请看这里:http://stackoverflow.com/questions/1700702/asp-net-membership-saves-changed-password-as-plain-text-even-with-hashed-passwor – Alexander

回答

0

我想我已经通过深入调查(反编译)一些代码,自己解决了这个问题并思考和尝试。有一个online SHA-256 calculator我用这个。

如果我输入SecurityToken/Salt“tn + nms4 =”第一个并将密码“stackoverflow”附加到它。然后甩这个。我得到了存储在数据库中的哈希值。

看起来像传统应用程序中使用的加密提供程序的实现不是纯粹的.NET,而更可能是自制的东西。