是否可以解密用 md5 生成的哈希?
示例:我想开发一个使用 md5 散列输入的系统。
它将是一个笔记系统,所以我想查看使用 .txt 文件执行此操作的 txt 文件fopen()。
加密过程将这样做:
fwrite ( $handle, md5($input) );
Run Code Online (Sandbox Code Playgroud)
该$input是$_GET['message']。
任何人都可以帮助如何打开笔记的解密版本?此致,
PS:便条系统是用来交换消息的,所以需要别人审核。
修改我的"问题",以免惹恼当地人.
现在互联网上似乎有这么多资源(包括SO),找到问题的"答案"可能很容易,但如何判断答案是否有效甚至是最新的?
特别是一个领域和一个被问到很多的领域是如何使用PHP正确处理散列和加密,以便在数据库存储中做好准备.关于SO的一个常见答案似乎总是"你有没有访问过php.net?".虽然我理解这通常会出现一个问题,其中有人问最简单的问题,但我已经开始发现一些描述似乎有冲突,更重要的是,用户示例已经过时(很多来自2008-2009).
例如:在寻找为什么以及如何使用密码哈希时:http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash
总之,我了解到sha1和md5是快速且计算效率高的哈希方法,它们不再适用于密码哈希.建议的方法是使用crypt()函数.
在了解有关crypt()以及特别是河豚哈希的更多信息时,页面上列出的规则如下:
http://www.php.net/manual/en/function.crypt.php
进一步阅读给出了一个例子:
<?php
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
似乎同一页面上的示例不遵循它刚刚告诉我们使用的规则("$ 2a $ 07 $"之后的26个字符.
回报是:
河豚:
$ 2a $ 07 $ usesomesillystringfore2uDLvp1Ii2e ./ U9C8sBjqp8I90dH6hi
实际上,字符串本身确实会被改变,但几乎我的整个SALT值(上面提到的前22个字符)都是敞开的.难道这不会让我更简单地确定我的实际字符串是什么吗?
更重要的是,这只是一个例子,但最终,依赖PHP.net等资源应该有多大?
正如我的朋友Mugatu曾经说过"我觉得我正在服用疯狂的药片".
注意:上面提到的页面是自我原始发布以来编辑的,所以我无法保证自从我的原始问题和示例提供后事情没有改变.
我在php中使用crypt函数生成了这个哈希:
$1$jV3.NS/.$JLVMBWe0N/W0Rbft4NgPV.
我知道$1$是MD5的哈希,jV3.NS/.是盐,其他文本是加密字符串.如果我知道盐,可以解密这个哈希吗?
我有以下代码:
import "github.com/kless/osutil/user/crypt/sha512_crypt"
c := sha512_crypt.New()
hash, err := c.Generate([]byte("enter-new-password"), []byte("$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"))
if err != nil {
panic(err)
}
Run Code Online (Sandbox Code Playgroud)
它产生了以下错误
http:恐慌服务192.168.0.16:56730:无效的魔术前缀
为什么会发生这种情况,我该如何解决?