Installation du module
Pour intégrer lua-resty-string dans votre environnement OpenResty, exécutez la commende suivanet :
sudo opm get openresty/lua-resty-string
Cette opération ajoute plusieurs fichiers Lua essentiels dans le répertoire des modules, incluant les implémentations pour AES, MD5, SHA, la génération aléatoire et les utilitaires de chaînes.
Exemples de code pour les opérations cryptographiques
Les exemples ci-dessous démontrent l'utilisation des fonctions de hachage et de chiffrement disponibles dans lua-resty-string.
Hachage avec SHA1
local sha1_module = require "resty.sha1"
local hex_converter = require "resty.string"
local hash_instance = sha1_module:new()
if not hash_instance then
ngx.say("Erreur lors de la création de l'instance SHA1")
return
end
local update_status = hash_instance:update("Contenu partiel")
if not update_status then
ngx.say("Échec de l'ajout des données")
return
end
update_status = hash_instance:update(" suite du message")
if not update_status then
ngx.say("Échec de l'ajout des données")
return
end
local sha1_digest = hash_instance:final()
ngx.say("Résultat SHA1: ", hex_converter.to_hex(sha1_digest))
Hachage avec MD5
local md5_lib = require "resty.md5"
local str_utils = require "resty.string"
local md5_context = md5_lib:new()
if not md5_context then
ngx.say("Impossible d'initialiser l'objet MD5")
return
end
md5_context:update("Segment de données 1")
md5_context:update("Segment de données 2")
local md5_hash = md5_context:final()
ngx.say("Empreinte MD5: ", str_utils.to_hex(md5_hash))
Hachage SHA224, SHA256, SHA384 et SHA512
local sha_variants = {
{ module = "resty.sha224", label = "SHA224" },
{ module = "resty.sha256", label = "SHA256" },
{ module = "resty.sha384", label = "SHA384" },
{ module = "resty.sha512", label = "SHA512" }
}
for _, variant in ipairs(sha_variants) do
local sha_lib = require(variant.module)
local hex_util = require "resty.string"
local sha_obj = sha_lib:new()
if sha_obj then
sha_obj:update("Données de test pour hachage")
local digest = sha_obj:final()
ngx.say(variant.label .. ": ", hex_util.to_hex(digest))
else
ngx.say("Échec pour " .. variant.label)
end
end
Génération de nombres aléatoires
local random_gen = require "resty.random"
local string_helper = require "resty.string"
local pseudo_bytes = random_gen.bytes(16) -- Octets pseudo-aléatoires
ngx.say("Données pseudo-aléatoires: ", string_helper.to_hex(pseudo_bytes))
local secure_bytes
repeat
secure_bytes = random_gen.bytes(16, true) -- Aléatoire cryptographiquement fort
until secure_bytes
ngx.say("Données aléatoires sécurisées: ", string_helper.to_hex(secure_bytes))
Chiffrement et déchiffrement avec AES
Configuration AES 128 CBC avec dérivation de clé MD5 :
local aes_module = require "resty.aes"
local format_util = require "resty.string"
local cipher_key = "CléSecrète12345"
local aes_instance = aes_module:new(cipher_key)
if not aes_instance then
ngx.say("Erreur d'initialisation AES")
return
end
local encrypted_data = aes_instance:encrypt("Message confidentiel")
ngx.say("Chiffré HEX: ", format_util.to_hex(encrypted_data))
local decrypted_data = aes_instance:decrypt(encrypted_data)
ngx.say("Déchiffré: ", decrypted_data)
Configuration AES 256 CBC avec sel et dérivation SHA-512 :
local aes_lib = require "resty.aes"
local hex_tool = require "resty.string"
local salt_value = "MonSel!8"
local aes_256_config = aes_lib:new("CléLonguePourAES256", salt_value, aes_lib.cipher(256, "cbc"), aes_lib.hash.sha512, 3)
if aes_256_config then
local ciphertext = aes_256_config:encrypt("Texte ultra-secret")
ngx.say("AES-256 chiffré: ", hex_tool.to_hex(ciphertext))
local plaintext = aes_256_config:decrypt(ciphertext)
ngx.say("AES-256 déchiffré: ", plaintext)
else
ngx.say("Impossible de configurer AES-256")
end
Configuration AES 128 CBC avec vecteur d'initialisation explicite :
local aes_provider = require "resty.aes"
local conv_utils = require "resty.string"
local iv_value = "1234567890123456"
local aes_iv_instance = aes_provider:new("CléPourAvecVI", nil, aes_provider.cipher(128, "cbc"), {iv = iv_value})
assert(aes_iv_instance, "Échec de création de l'instance AES avec IV")
local enc_result = aes_iv_instance:encrypt("Données protégées par IV")
ngx.say("AES avec IV chiffré: ", conv_utils.to_hex(enc_result))
local dec_result = aes_iv_instance:decrypt(enc_result)
ngx.say("AES avec IV déchiffré: ", dec_result)
Résultats attendus
L'exécution des exemples précédents produit des sorties similaires aux suiventes, variant selon les données d'entrée :
Résultat SHA1: [empreinte hexadécimale SHA1]
Empreinte MD5: [empreinte hexadécimale MD5]
SHA224: [hash SHA224]
SHA256: [hash SHA256]
SHA384: [hash SHA384]
SHA512: [hash SHA512]
Données pseudo-aléatoires: [suite hexadécimale]
Données aléatoires sécurisées: [suite hexadécimale]
Chiffré HEX: [données chiffrées en hex]
Déchiffré: Message confidentiel
AES-256 chiffré: [données chiffrées AES-256]
AES-256 déchiffré: Texte ultra-secret
AES avec IV chiffré: [données chiffrées avec IV]
AES avec IV déchiffré: Données protégées par IV