zoukankan      html  css  js  c++  java
  • 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=
    
  • 相关阅读:
    最强神作!Crysis深度剖析与优化指南(1825)
    到底什么样的一款游戏就算全3D?
    [转贴]因父之名:一个“非科班”的成长史
    转载《阅读一款3D引擎的方法备忘》
    魔兽世界角色换装
    Flash游戏开发之按键控制(复合键,八方向键)
    通过MC里的按钮跳转场景
    Cuyahoga 的安装
    如何从数组中随机取出多个不重复的项
    [Flash开发笔记] flash 8 中的 setTimeout()
  • 原文地址:https://www.cnblogs.com/jimodetiantang/p/9280568.html
Copyright © 2011-2022 走看看