string: String-Hilfsprogramme und gängige Hash-Funktionen für nginx-module-lua und LuaJIT
Installation
Wenn Sie das RPM-Repository-Abonnement noch nicht eingerichtet haben, melden Sie sich an. Danach können Sie mit den folgenden Schritten fortfahren.
CentOS/RHEL 7 oder 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-string
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-string
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-string v0.16, veröffentlicht am 08. August 2024.
Diese Bibliothek erfordert einen NGINX-Build mit OpenSSL, dem ngx_lua-Modul und LuaJIT 2.0.
Synopsis
# nginx.conf:
server {
location = /test {
content_by_lua_file conf/test.lua;
}
}
-- conf/test.lua:
local resty_sha1 = require "resty.sha1"
local sha1 = resty_sha1:new()
if not sha1 then
ngx.say("Fehler beim Erstellen des sha1-Objekts")
return
end
local ok = sha1:update("hello, ")
if not ok then
ngx.say("Fehler beim Hinzufügen von Daten")
return
end
ok = sha1:update("world")
if not ok then
ngx.say("Fehler beim Hinzufügen von Daten")
return
end
local digest = sha1:final() -- binärer Digest
local str = require "resty.string"
ngx.say("sha1: ", str.to_hex(digest))
-- Ausgabe: "sha1: b7e23ec29af22b0b4e41da31e868d57226121c84"
local resty_md5 = require "resty.md5"
local md5 = resty_md5:new()
if not md5 then
ngx.say("Fehler beim Erstellen des md5-Objekts")
return
end
local ok = md5:update("hel")
if not ok then
ngx.say("Fehler beim Hinzufügen von Daten")
return
end
-- md5:update() mit einem optionalen "len"-Parameter
ok = md5:update("loxxx", 2)
if not ok then
ngx.say("Fehler beim Hinzufügen von Daten")
return
end
local digest = md5:final()
local str = require "resty.string"
ngx.say("md5: ", str.to_hex(digest))
-- ergibt "md5: 5d41402abc4b2a76b9719d911017c592"
local resty_sha224 = require "resty.sha224"
local str = require "resty.string"
local sha224 = resty_sha224:new()
ngx.say(sha224:update("hello"))
local digest = sha224:final()
ngx.say("sha224: ", str.to_hex(digest))
local resty_sha256 = require "resty.sha256"
local str = require "resty.string"
local sha256 = resty_sha256:new()
ngx.say(sha256:update("hello"))
local digest = sha256:final()
ngx.say("sha256: ", str.to_hex(digest))
local resty_sha512 = require "resty.sha512"
local str = require "resty.string"
local sha512 = resty_sha512:new()
ngx.say(sha512:update("hello"))
local digest = sha512:final()
ngx.say("sha512: ", str.to_hex(digest))
local resty_sha384 = require "resty.sha384"
local str = require "resty.string"
local sha384 = resty_sha384:new()
ngx.say(sha384:update("hel"))
ngx.say(sha384:update("lo"))
local digest = sha384:final()
ngx.say("sha384: ", str.to_hex(digest))
local resty_random = require "resty.random"
local str = require "resty.string"
local random = resty_random.bytes(16)
-- generiere 16 Bytes pseudo-zufälliger Daten
ngx.say("pseudo-zufällig: ", str.to_hex(random))
local resty_random = require "resty.random"
local str = require "resty.string"
local strong_random = resty_random.bytes(16,true)
-- versuche, 16 Bytes kryptographisch starker Zufallsdaten zu generieren
while strong_random == nil do
strong_random = resty_random.bytes(16,true)
end
ngx.say("zufällig: ", str.to_hex(strong_random))
local aes = require "resty.aes"
local str = require "resty.string"
local aes_128_cbc_md5 = aes:new("AKeyForAES")
-- der Standardcipher ist AES 128 CBC mit 1 Runde MD5
-- für den Schlüssel und einem nil-Salz
local encrypted = aes_128_cbc_md5:encrypt("Geheime Nachricht!")
ngx.say("AES 128 CBC (MD5) Verschlüsselt HEX: ", str.to_hex(encrypted))
ngx.say("AES 128 CBC (MD5) Entschlüsselt: ", aes_128_cbc_md5:decrypt(encrypted))
local aes = require "resty.aes"
local str = require "resty.string"
local aes_256_cbc_sha512x5 = aes:new("AKeyForAES-256-CBC",
"MySalt!!", aes.cipher(256,"cbc"), aes.hash.sha512, 5)
-- AES 256 CBC mit 5 Runden SHA-512 für den Schlüssel
-- und einem Salz von "MySalt!!"
-- Hinweis: Salz kann entweder nil oder genau 8 Zeichen lang sein
local encrypted = aes_256_cbc_sha512x5:encrypt("Wirklich geheime Nachricht!")
ngx.say("AES 256 CBC (SHA-512, gesalzen) Verschlüsselt HEX: ", str.to_hex(encrypted))
ngx.say("AES 256 CBC (SHA-512, gesalzen) Entschlüsselt: ",
aes_256_cbc_sha512x5:decrypt(encrypted))
local aes = require "resty.aes"
local str = require "resty.string"
local aes_128_cbc_with_iv = assert(aes:new("1234567890123456",
nil, aes.cipher(128,"cbc"), {iv="1234567890123456"}))
-- AES 128 CBC mit IV und ohne SALZ
local encrypted = aes_128_cbc_with_iv:encrypt("Wirklich geheime Nachricht!")
ngx.say("AES 128 CBC (MIT IV) Verschlüsselt HEX: ", str.to_hex(encrypted))
ngx.say("AES 128 CBC (MIT IV) Entschlüsselt: ",
aes_128_cbc_with_iv:decrypt(encrypted))
local aes = require "resty.aes"
local str = require "resty.string"
local enable_padding = false
local aes_256_cbc_with_padding = aes:new(
key, nil, aes.cipher(256,"cbc"), {iv = string.sub(key, 1, 16)}, nil,
nil, enable_padding)
-- AES-256 CBC (benutzerdefinierte Schlüsselgenerierung, Benutzer-Padding mit block_size=32)
local text = "hello"
local block_size = 32
local pad = block_size - #text % 32
local text_paded = text .. string.rep(string.char(pad), pad)
local encrypted = aes_256_cbc_with_padding:encrypt(text_paded)
ngx.say("AES-256 CBC (benutzerdefinierte Schlüsselgenerierung, Benutzer-Padding mit block_size=32) HEX: ",
str.to_hex(encrypted))
Siehe auch
- das ngx_lua-Modul: http://wiki.nginx.org/HttpLuaModule
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-string.