scrypt: 基于 LuaJIT FFI 的 scrypt 库,用于 nginx-module-lua
安装
如果您尚未设置 RPM 仓库订阅,请 注册。然后您可以继续以下步骤。
CentOS/RHEL 7 或 Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-scrypt
CentOS/RHEL 8+、Fedora Linux、Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-scrypt
要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua。
本文档描述了 lua-resty-scrypt v1.0,于 2014 年 10 月 09 日发布。
lua-resty-scrypt 是一个用于 OpenResty 的 scrypt(密码)哈希库。
使用 lua-resty-scrypt 的 Hello World
local scrypt = require "resty.scrypt"
local hash = scrypt.crypt "My Secret" -- 返回可以存储在数据库中的哈希
local valid = scrypt.check("My Secret", hash) -- valid 为 true
local valid = scrypt.check("My Guess", hash) -- valid 为 false
local n,r,p = scrypt.calibrate() -- 返回 n,r,p 校准值
Lua API
string scrypt.crypt(opts)
使用 scrypt 算法从输入生成哈希。输入参数 opts 可以是 string(一个 secret)或一个表。如果是表,您还可以传入一些配置参数。可用的表选项(默认值如下):
local opts = {
secret = "",
keysize = 32,
n = 32768,
r = 8,
p = 1,
salt = "使用 OpenSSL 生成的随机 (saltsize) 字节",
saltsize = 8
}
如果您传递给 opts 的不是表,它将被 tostring 转换并用作 secret。keysize 可以在 16 到 512 之间,saltsize 可以在 8 到 32 之间。
此函数返回的字符串格式如下:
n$r$p$salt$hash
所有部分呈现其值的 hex dump。
示例
local h1 = scrypt.crypt "My Secret"
local h2 = scrypt.crypt{
secret = "My Secret",
keysize = 512
}
boolean scrypt.check(secret, hash)
使用此函数,您可以检查 secret 是否与使用 scrypt.crypt 从相同 secret 生成的 hash 真的匹配。hash 还包含配置参数,如 n、r、p 和 salt。
示例
local b1 = scrypt.check("My Secret", scrypt.crypt "My Secret") -- 返回 true
local b2 = scrypt.check("My Secret", scrypt.crypt "No Secret") -- 返回 false
n, r, p scrypt.calibrate(maxmem, maxmemfrac, maxtime)
此函数可用于根据 maxmem、maxmemfrac 和 maxtime 参数计算 n、r 和 p 配置值。以下是这些参数的默认值:
maxmem = 1048576
maxmemfrac = 0.5
maxtime = 0.2
结果可能会根据您计算机的处理能力而变化。
示例
local n,r,p = scrypt.calibrate()
local hash = scrypt.crypt{
secret = "My Secret",
n = n,
r = r,
p = p
}
number scrypt.memoryuse(n, r, p)
计算提供的 n、r 和 p 参数的 scrypt 算法的内存使用情况。
示例
local memoryuse = scrypt.memoryuse(scrypt.calibrate())
n、r 和 p 的默认参数为:
n = 32768
r = 8
p = 1
GitHub
您可以在 nginx-module-scrypt 的 GitHub 仓库 中找到此模块的其他配置提示和文档。