Golang Scrypt Decrypt

时间:2018-05-18 12:27:37

标签: python go encryption scrypt

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

似乎go库只提供了一个加密数据的功能,因为看起来这个python库不仅提供了这种功能,而且还提供了一种反转/解密摘要的方法,并提供了一个使用scrypt来实现更简单的功能的功能。 -way哈希函数。

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

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

感谢。

更新

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

因此,有了这种理解,Golang的scrypt接口就不支持decrypt之类的任何功能。但那么py-script的decrypt function如何运作?

好吧,如果我回头看https://www.tarsnap.com/scrypt.html,它说scrypt可执行文件提供了“加密实用程序”......

  

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

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

因此,尽管我不一定知道tarsnap的加密实用程序是如何构建的以及它在幕后做了什么(例如,正在使用什么样的实际加密算法),但事实是scrypt只是真正被设计为一个关键的派生函数,这些额外的tarsnap函数使用该摘要输出,以支持加密/解密。

1 个答案:

答案 0 :(得分:3)

scrypt没有解密,只有验证。

scrypt decrypt函数执行的操作是使用encrypt函数创建的密码和密码哈希,并通过对encrypt函数执行的密码执行相同操作来验证然后比较两个哈希。

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

scrypt没有解密,这是一个缺乏理解的开发人员的误称。它甚至不是加密,它是一个加密哈希函数,无法从中获取原始输入。