我找到了一种加密密码的简单加密方法。 (我认同)。我想用我的应用程序的方法。但我正在努力开发一种解密方法来获取已通过该加密方法加密的实际字符串。任何人都可以为我提供这种加密方法的解密方法吗?提前谢谢!
-(void)setMaximumLeftDrawerWidth:(CGFloat)width animated:(BOOL)animated completion:(void(^)(BOOL finished))completion;
答案 0 :(得分:2)
如果我没弄错的话,那个方法是使用SHA1标准散列你的密码。
哈希是一种特殊的单向加密方式。意思是you can't decrypt it。
我认为你想解密它以便根据登录表单检查某人的密码。处理它的方法是存储加密密码;然后当有人填写表单时,使用相同的加密方法加密他们的输入,看看两个加密的字符串是否匹配。
另一方面,如果您正在进行哈希处理,请不要忘记给哈希加盐。这将要求您将哈希和salt存储在数据库中;检查密码时,只需检索与输入的用户名相关联的salt,将其添加到表单输入的密码中,对其进行哈希处理,然后根据存储的盐水检查新哈希值。如果他们匹配,宾果游戏!如果没有,那就是密码错误。
查看类似问题的其他答案,让我为完整性添加此内容。
这个问题的简短回答是否。这些散列算法被设计为“不可破解”。然而,这并不意味着它们不能被打破。打破SHA1或任何其他基于模数的散列算法的方法是“猜测和检查”。基本上是:
就像你遇到过的任何其他密码系统一样,打破它的方法就是蛮力。你可以想象有很多程序可以做到这一点。散列算法的问题是它们对同一输入产生相同的结果;由于您使用的是SHA1,这是数百万其他应用程序使用的标准库,我可以向您保证,如果您使用普通的SHA1 SHA1,它将被破坏。
如上所述,该问题的解决方案是使用腌制。这会为每个用户更改特定密码的输入;这意味着如果三个用户都拥有相同的密码,例如说“密码”,则每个用户的密码都将作为不同的结果存储在数据库中。
如果他们在没有盐的情况下通过sha1,他们都是一样的,因为你输入了相同的输入:
password ---SHA1---> sha1$asdfasdfasdfasdf
password ---SHA1---> sha1$asdfasdfasdfasdf
password ---SHA1---> sha1$asdfasdfasdfasdf
因此,如果有人访问了您的数据库,他们可以查找重复项并检查常用密码,直到他们意识到sha1$asdfasdfasdfasdf
实际上意味着“密码”。
但是通过在等式中添加盐,每个用户实际上都在输入不同的密码
salt1password ---SHA1---> sha1$aogiahowehgpa
salt2password ---SHA1---> sha1$oh9h42h980agh
salt3password ---SHA1---> sha1$322tyyha0gh9w
这使您的系统几乎不可能破解。如果有人访问了您的数据库,则无需检查重复项。