OpenResty之ngx_lua模塊的加密接口


原文: ngx_Lua模塊中的加密api接口

ngx.crc32_short

digest = ngx.crc32_short(str)

該方法主要是計算給定字符串 str 的循環校驗碼(Cyclic Redundancy Code)的摘要,計算出來的結果是一個很大的整數。

ngx.crc32_long

digest = ngx.crc32_long(str)

該方法與 ngx.crc32_short() 方法的計算得到的結果是一致的,主要區別在於 ngx.crc32_short 適合用戶計算長度介入 30~60 之間的 str 的摘要,而 ngx.crc32_long 更適合計算長度超過 30~60 的 str 的摘要。因此,到底選擇哪一個 api 進行計算 str 的 crc_32 摘要,主要取決於 str 的長度。

ngx.hmac_sha1

digest = ngx.hmac_sha1(secret_key, str)

該方法主要用於計算輸入字符串 str 的 HMAC-SHA1 的摘要,並根據 secret_key 對結果進行轉換,計算后得到的結果是二進制格式的,可以通過 ngx.encode_base64 轉換成非二進制格式的字符串,如:

local key = "thisisverysecretstuff"
local src = "some string we want to sign"
local digest = ngx.hmac_sha1(key, src)
ngx.say(ngx.encode_base64(digest))

ngx.md5

digest = ngx.md5(str)

該方法將返回字符串 str 的 MD5 摘要的 16 進制的表示,如下:

location = /md5 {
    content_by_lua 'ngx.say(ngx.md5("hello"))';
}

產生的結果如下:

5d41402abc4b2a76b9719d911017c592

ngx.md5_bin

digest = ngx.md5_bin(str)

該方法將返回字符串 str 的 MD5 摘要的二進制格式,可以通過 ngx.encode_base64 方法轉換成非二進制格式的字符串,或者直接使用 ngx.md5 方法。

ngx.sha1_bin

digest = ngx.sha1_bin(str)

該方法將返回字符串 str 的二進制格式的 SHA-1 摘要,可以通過 ngx.encode_base64 方法轉換成非二進制格式的字符串。如下示例:

location /encryption {
    content_by_lua '
        local crc_32s, crc_32l
        local key = "it is my secret"
        local str = "encrypted hello yuefei"
        crc_32s = ngx.crc32_short(str)
        crc_32l = ngx.crc32_long(str)
        local hmac = ngx.hmac_sha1(key, str)
        local md5 = ngx.md5(str)
        local md5_bin = ngx.md5_bin(str)
        local sha1_bin = ngx.sha1_bin(str)
        ngx.say("crc_32_short: ", crc_32s, ", crc_32_long: ", crc_32l)
        ngx.say("hmac: ", ngx.encode_base64(hmac))
        ngx.say("md5: ", md5, ", md5_bin: ", ngx.encode_base64(md5_bin))
        ngx.say("sha1_bin: ", ngx.encode_base64(sha1_bin))
    ';
}

輸出結果:

crc_32_short:1560312840, crc_32_long: 1560312840
hmac: 1gpvtAliGFZfSqSD32Sz04/3PiM=
md5: b80a89b331b307dbef83e2eb90c43481, md5_bin: uAqJszGzB9vvg+LrkMQ0gQ==
sha1_bin: 2A/wkXlXjz1t3wmNxMUi3QuMP7c=


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM