【问题标题】:iSeries (AS/400) Database File: password encryptioniSeries (AS/400) 数据库文件:密码加密
【发布时间】:2011-10-23 10:42:09
【问题描述】:
我正在帮助一个项目,其中 iSeries 上的旧软件系统应用了全新的 .NET UI。进展顺利……除了……
为了让用户能够登录并保持与现有软件安装的兼容性,我们需要弄清楚以前的供应商在不访问其源代码的情况下使用了哪种加密/散列方法。
我有一个包含 ID 和密码列的文件。密码列似乎每条记录仅包含 16 个字符,全部为二进制。
以前的供应商系统的一部分是用 400 上的原生绿屏编写的,一部分是用 Microsoft ASP.Net 编写的。
将是什么类型的加密或哈希:
- 由 AS/400 或 iSeries 绿屏应用程序使用,并且
- 供 Microsoft .NET 应用使用,并且
- 无论输入长度如何,输出一致的 16 个二进制字节
非常感谢指针。谢谢!
【问题讨论】:
标签:
.net
encryption
cryptography
passwords
ibm-midrange
【解决方案1】:
i 有许多内置和第三方加密方案。最好的办法是找到供应商在其应用程序中使用的 API 或直接询问他们。一个设计良好的应用程序会将登录代码放在一个位置。
注意:我已经与足够多的供应商打过交道,知道我所说的就像要求您将埃菲尔铁塔向左移动 2 英寸。
【解决方案2】:
第一个停靠点是旧系统的系统手册。之后联系供应商,并假设您支付了支持费用(您确实支付了支持费用,不是吗),让他们的技术支持人员回答您的问题。
如果这对你没有任何帮助,你必须开始挖掘。十六个字符是 128 位,所以你可能有一个 128 位的哈希值。最有可能是 MD5,特别是如果原始代码的日期是 1991 年到 1996 年左右。
接下来,您需要确定它是否在对密码进行哈希处理之前添加盐。在旧系统上创建两个具有不同用户名和相同密码的新用户帐户。说“user1/password”和“user2/password”。现在查看密码文件并找到两个新条目。如果两个散列相同,则没有使用盐,您可能有一个简单的密码散列。如果没有,请尝试用户名和密码的简单组合的 MD5 哈希:
用户1密码
密码user1
用户1:密码
密码:user1
等等
如果其中一项有效,那么您已经解决了。如果没有,那么您将花费很长时间来构建彩虹表和各种其他密码分析工具。
如果实现了这一点,将网络嗅探器放到您的网络上,它会攻击旧系统,这样您就可以在用户密码被散列之前读取它们,这可能会更容易。为了进一步确定,在您记录密码之前,检查“您正确登录”消息是否会以另一种方式返回。他们可能只是在错误的时间打错了。