我有一个使用 ASP.NET 2.0 构建的旧版 Web 应用程序。此应用程序中实现了一个用户注册过程,用户名和密码存储到 SQL Server 数据库中。密码按照预期进行哈希处理。虽然我不是一个非常有经验的 .NET 程序员,但我猜想 System.Security.Cryptography 程序集可以完成这项工作。
现在我们希望将此用户数据库重用于其他服务(基本上 SAML Identity Proider 是理想的选择)。我想使用 Mule ESB 和 Java 代码的组合来完成此操作,但是我是否有机会像 .NET 一样在 java 中对密码进行哈希处理,并在我的用户数据库上检查此哈希值?有人已经这样做了吗?
编辑:我进一步调查了旧版应用程序。我使用密码“stackoverflow”创建了一个“Testuser”。在数据库中,我有 2 个字段,一个名为“Password”,一个名为“EncryptionToken”。
对于上面的凭据,“stackoverflow”变为
Password: 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 中重现这一点。你能给我一些提示吗?
最佳答案
我想我已经通过深入研究(反编译)一些代码并思考和尝试自己解决了这个问题。有一个online SHA-256 calculator我用的是这个。
如果我输入 SecurityToken/Salt首先输入“tn+nms4=”,然后在其后面附加密码“stackoverflow”。然后散列这个。我准确地得到了存储在数据库中的哈希值。
看起来遗留应用程序中使用的加密提供程序的实现根本不是普通的 .NET,而更有可能是自行设计的。
关于java - .NET 使用哪种哈希算法,我是否能够使用 java 对这些哈希值执行密码检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22007527/