3

我试图在 Go 中模仿,python 库 ( https://pypi.org/project/scrypt/ ) 中可用的功能,用于解密scrypt 生成的摘要(给定正确的密码)。

似乎 go 库只提供了一个用于加密数据的函数,而这个 python 库似乎不仅提供了这一点,而且还提供了一种反转/解密摘要的方法,以及提供使用 scrypt 进行更简单的单向哈希的函数功能。

我不是安全专家,我也不懂数学/数字,所以我觉得试图复制那个 python 库超出了我的理解。我认为这是可能的,因为 python 库似乎已经实现了它。

有谁知道我什至会从哪里开始解决这个问题。或者慷慨地利用他们的时间提供某种形式的示例代码来帮助我。

谢谢。

更新

scrypt 函数本质上是一个散列函数。它使用密码作为派生摘要的一种方式:意思是,应该无法检索原始消息(经过哈希处理的消息)。

因此,有了这种理解,Golang 的 scrypt 接口不支持任何此类功能(例如decrypt. 但是 py-script 的decrypt功能是如何工作的呢?

好吧,如果我回顾一下https://www.tarsnap.com/scrypt.html它指出 scrypt 可执行文件提供了一个“加密实用程序”......

一个简单的基于密码的加密实用程序可用作 scrypt 密钥派生功能的演示。可以调用 scrypt 实用程序scrypt enc infile [outfile]来加密数据(如果outfile未指定,则将加密数据写入标准输出)或scrypt dec infile [outfile]解密数据(如果outfile未指定,则将解密数据写入标准输出)。

...并且在检查 py-script 我看到它嵌入了 scrypt 可执行文件的一个版本,这意味着 py-script 正在调用可执行文件的encdec函数。

因此,虽然我不一定知道 tarsnap 的加密实用程序是如何构建的以及它在幕后所做的事情(例如,正在使用什么实际加密算法),但事实是 scrypt 只是真正设计为密钥派生函数和摘要输出由那些附加的 tarsnap 函数以支持加密/解密的方式使用。

4

1 回答 1

4

没有解密scrypt,只有验证。

scryptdecrypt函数所做的是获取一个密码和一个由该encrypt函数创建的密码哈希,并通过对密码执行与该encrypt函数所做的相同操作然后比较两个哈希来进行验证。

检查Golang文档以了解验证功能名称和用法。

scrypt不解密,这是缺乏理解的开发人员用词不当。它甚至不是加密,它是一个加密散列函数,无法从中获得原始输入。

于 2018-05-18T13:52:37.940 回答