我正在尝试模仿Go,python库(https://pypi.org/project/scrypt/)中提供的功能,用于解密scrypt生成的摘要(给定正确的密码)。
go库似乎只提供了一个用于加密数据的函数,而这个python库似乎不仅提供了这个函数,而且还提供了一种反向/解密摘要的方法,以及提供了一个使用scrypt来实现更简单的单向散列函数的函数。
我不是安全专家,也不懂数学/数字,所以我想尝试复制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]调用以解密数据(如果未指定outfile,则将解密的数据写入标准输出)。
在检查py- ...and时,我看到它嵌入了scrypt可执行文件的一个版本,这意味着py-script正在调用可执行文件的enc和dec函数。
因此,尽管我不一定知道tarsnap的加密实用程序是如何构建的,以及它在幕后做了什么(例如,正在使用什么实际的加密算法),但事实是,scrypt只被设计为一个密钥派生函数,而摘要输出是由那些额外的tarsnap函数以支持加密/解密的方式使用的。
发布于 2018-05-18 21:52:38
没有scrypt的解密,只有验证。
decrypt函数的作用是获取密码和由encrypt函数创建的密码散列,并通过对密码执行与encrypt函数相同的操作进行验证,然后比较这两个散列。
请查看Golang文档,了解验证函数的名称和用法。
scrypt不能解密,这是一个缺乏理解的开发人员的用词不当。它甚至不是加密,它是一个密码学散列函数,无法从其中获得原始输入。
https://stackoverflow.com/questions/50411340
复制相似问题