Cryptography 使用已知哈希码确定加密算法

Cryptography 使用已知哈希码确定加密算法,cryptography,passwords,password-protection,Cryptography,Passwords,Password Protection,我的同事们正在使用一个商业程序,在一些数据库上对登录密码进行编码和存储 现在,我正在开发另一个程序来完成一些其他任务,但我希望我的同事用他们相同的用户名和密码来验证这个程序,以避免混淆 问题是,我没有(可能永远也不会)任何源代码来确定他们使用了哪种加密算法。 我运行了一些测试,发现相同的密码总是产生相同的哈希代码,长度为24个字符。比如, 1 XeVTgalUq/gJxHtsMjMH5Q== 123456 0Q8UhOcqClGBxpqzooeFXQ== 有没有办法确

我的同事们正在使用一个商业程序,在一些数据库上对登录密码进行编码和存储

现在,我正在开发另一个程序来完成一些其他任务,但我希望我的同事用他们相同的用户名和密码来验证这个程序,以避免混淆

问题是,我没有(可能永远也不会)任何源代码来确定他们使用了哪种加密算法。 我运行了一些测试,发现相同的密码总是产生相同的哈希代码,长度为24个字符。比如,

1         XeVTgalUq/gJxHtsMjMH5Q== 

123456    0Q8UhOcqClGBxpqzooeFXQ==
有没有办法确定他们使用了哪种算法?
提前谢谢,

没有。这就是加密/散列的要点——它应该是不透明的,因此不容易进行反向工程。您唯一能做的就是尝试一些著名的散列算法,如SHA-1,看看散列值是否与其他程序匹配。但是,没有办法知道另一个程序是否添加了任何“salt”,或者是将多个内容散列在一起,例如用户名+密码或其他方案。所以你可能在这方面运气不好

您可以尝试使用新程序:如果用户以前从未登录过,请允许他们使用任何密码首次登录。告诉用户他们应该使用与其他程序相同的密码。然后,当他们登录时,捕获该值并使用您自己的哈希方案对其进行哈希,然后存储该值以供将来登录。因此,最终您将获得您想要的结果(用户可以使用相同的密码),而无需对其他程序的加密方案进行反向工程


现在,显然这种方法的缺点是第一次登录根本不安全。如果有人在真正的用户第一次登录之前以该用户的身份登录(从而锁定其密码),则可能会劫持另一个用户的帐户。因此,只有在新程序中没有预先加载的敏感数据可能被破坏的情况下,这才是一个选项。此外,您还需要管理员能够重置用户密码,这样,如果发生这种情况,您可以在实际用户报告他们无法登录时轻松更正密码。

无法反转哈希函数抱歉……这些可能是16字节输出的base64编码版本。这表明MD5是一个可能的候选者,MD4或MD2的可能性较小。如果他们是同事,你不应该问他们使用了什么算法吗?或者你是在一家奇怪的公司,那里禁止内部沟通吗?@Paulo Ebermann,我的同事使用“我们从另一家软件公司购买的程序”。因为我们没有它的源代码,我不知道他们使用了哪种算法。嗯,我永远不会使用一个加密程序,它甚至没有关于正在使用的算法的文档。(但你的公司可以随心所欲。)你可以问这家公司(不是问源代码,只是问使用的哈希算法和它的输入是什么)-这应该是可以回答的,因为你想创建互操作性。谢谢你的评论!我试过MD5、SHA、SHA1以及它们与UTF-8-16-32模式的组合,结果空手而归。但我必须承认,你匹配密码的解决方案太棒了!。现在我只需要确保他们在第一次尝试时正确输入密码:)对于第一次登录,编写一个小例程将输入的密码复制到旧程序中,并查看是否匹配。每个用户只需要一次(如果密码正确)。