原文: 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=

OpenResty之ngx_lua模块的加密接口的更多相关文章

  1. ngx_lua 模块详细讲解(基于openresty)

    ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...

  2. OpenSSL中的大数接口与基于其的自用RSA加密接口设计

    本文记录了初次接触OpenSSL中的大数模块,重温了RSA加密流程,使用OpenSSL的接口包装成自用RSA加密接口,并且利用自己的接口演示了Alice与Bob通过RSA加密进行通讯的一个示例. 概览 ...

  3. ngx_lua 模块

    ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...

  4. Python模块02/序列化/os模块/sys模块/haslib加密/collections

    Python模块02/序列化/os模块/sys模块/haslib加密/collections 内容大纲 1.序列化 2.os模块 3.sys模块 4.haslib加密 5.collections 1. ...

  5. ngx_lua模块

    ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...

  6. Postman 如何调试加密接口?

    大家好,我是安果! 众所周知,Postman 是一款非常流行且易用的 API 调试工具,在接口调试或测试时经常被使用针对普通 API 接口,我们可以直接在 Postman 中输入 URL.Query ...

  7. hashlib 模块:加密

    import hashlib # 基本使用 cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8')) print(cipher.hexdigest() ...

  8. LNMP平滑升级nginx并安装ngx_lua模块教程

    #ngx_lua module项目地址 https://github.com/chaoslawful/lua-nginx-module 在LNMP安装包后,重编译nginx,并添加ngx_lua模块 ...

  9. jmeter处理加密接口

    jmeter处理加密接口 普及知识点: 我们常见的加密方式有:(RSA .AES.MD5.secret) 如下四种情况: 1.请求加密.响应加密 2.请求不加密.响应加密 4.请求加密.响应不加密 5 ...

随机推荐

  1. 【SQL server】SQL server基础(一)

    一.关系型数据库 关系型数据库的基本元素是二维表,这些二维表可以被独立或者通过join语句连接起来使用.主键和外键是用来连接二维表之间的主要工具 1.主键(primary key)和外键(foreig ...

  2. tiny4412 串口驱动分析九 --- shell终端

    作者:彭东林 邮箱:pengdonglin137@163.com 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 ...

  3. Python查看模块函数,查看函数方法的详细信息

    Python查看方法的详情 1.通用的帮助函数help() 使用help()函数来查看函数的帮助信息. 如: import requests help(requests) 会有类似如下输出: 2.查询 ...

  4. 服务器IP与个人IP的特点

    服务器IP:系统类型.开放的端口及运行的服务.C段同类机器数量.是否机房.IDC服务商 个人IP:系统类型.开放的端口及运行的服务……

  5. js之head请求,闪电般实现交互

    平时我们用到的请求一般为post和get,今天介绍一种新的请求方式,head请求,顾名思义,head请求就是请求头部信息的,也只能请求头部信息,所以相应速度非常快,可以快速的实现前后端的交互 $.aj ...

  6. 计算广告(4)----搜索广告召回(也叫match、触发)

    一.搜索广告形态 1.特征工程 特征主要有用户画像(user profile).用户行为(user behavior).广告(ad)和上下文(context)四部分组成,如下所示: 2.平台算法主要分 ...

  7. PWA

    附一个示例e6书写 todolist的示例,切换list的状态: //todolist示例 const toggleTodo = (id)=>{ setTodos(todos => tod ...

  8. [原创]VSCode debug jest的配置

    重拾JS的路从修改JS源码开始,修改JS源码从源码自带的test code开始.源码的test code使用了jtest框架,从test code刚好可以看到要修改部分的 多种传值方式,以及函数输出结 ...

  9. BZOJ 3884——欧拉降幂和广义欧拉降幂

    理论部分 欧拉定理:若 $a,n$ 为正整数,且 $a,n$ 互质,则 $a^{\varphi (n)} \equiv 1(mod \ n)$. 降幂公式: $$a^b=\begin{cases}a^ ...

  10. redis使用例子

    package test.iafclub.redis; import java.util.ArrayList; import java.util.HashMap; import java.util.I ...