OpenResty之ngx_lua模块的加密接口
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模块的加密接口的更多相关文章
- ngx_lua 模块详细讲解(基于openresty)
ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...
- OpenSSL中的大数接口与基于其的自用RSA加密接口设计
本文记录了初次接触OpenSSL中的大数模块,重温了RSA加密流程,使用OpenSSL的接口包装成自用RSA加密接口,并且利用自己的接口演示了Alice与Bob通过RSA加密进行通讯的一个示例. 概览 ...
- ngx_lua 模块
ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...
- Python模块02/序列化/os模块/sys模块/haslib加密/collections
Python模块02/序列化/os模块/sys模块/haslib加密/collections 内容大纲 1.序列化 2.os模块 3.sys模块 4.haslib加密 5.collections 1. ...
- ngx_lua模块
ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...
- Postman 如何调试加密接口?
大家好,我是安果! 众所周知,Postman 是一款非常流行且易用的 API 调试工具,在接口调试或测试时经常被使用针对普通 API 接口,我们可以直接在 Postman 中输入 URL.Query ...
- hashlib 模块:加密
import hashlib # 基本使用 cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8')) print(cipher.hexdigest() ...
- LNMP平滑升级nginx并安装ngx_lua模块教程
#ngx_lua module项目地址 https://github.com/chaoslawful/lua-nginx-module 在LNMP安装包后,重编译nginx,并添加ngx_lua模块 ...
- jmeter处理加密接口
jmeter处理加密接口 普及知识点: 我们常见的加密方式有:(RSA .AES.MD5.secret) 如下四种情况: 1.请求加密.响应加密 2.请求不加密.响应加密 4.请求加密.响应不加密 5 ...
随机推荐
- Java中常见时间类的使用
模拟场景针对于常用的操作API,比如流操作(字符流.字节流),时间操作等,仅仅了解概念性的定义终究是无法了解该类的用途和使用方式:这种情况在使用的时候便一脸茫然,脑海中映射不到对应的知识点.本篇博客将 ...
- div上中下布局中间自适应
需求1: 头尾固定高度,中间自适应 1.上部(header)Div高度固定100px,宽度100%: 2.下部(footer)Div高度固定100px,宽度100%: 3.中部(middle)DIV高 ...
- Struts2系列漏洞起始篇
前言 到目前位置struts2的漏洞编号已经到了S2-057,一直想系统的学习下Struts2的漏洞,但由于工作量较大,一直搁浅.最近由于工作需要,借此机会来填下坑.个人认为一个框架漏洞出来了仅仅看下 ...
- Windows服务 + Quartz.NET
服务基础 安装管理员打开cmd cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 InstallUtil.exe Path_WinSvc.exe 或者 ...
- Ubuntu 远程管理常用命令
目标 关机/重启 shutdown 查看或配置网卡信息 ifconfig ping 远程登录和复制文件 ssh scp 01. 关机/重启 序号 命令 对应英文 作用 01 shutdown 选项 时 ...
- 【2017-06-29】在登录页面自动返回上次请求页面、Js获取table中的行数与列数
一.在登录页面自动返回上次请求页面 Request.UrlReferrer比如 if (Request.UrlReferrer != null) { //如果能获取来路地址 Response.Redi ...
- 深度学习—从LeNet到DenseNet
CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF Net到VGG,GoogLeNet再到ResNet和最近的DenseNet,网络越来越深, ...
- idou老师教你学Istio 29:Envoy启动流程
1. 功能概述 Envoy启动时,会启动一个进程,并在这个进程中启动很多线程,这样,可以启动很多worker线程,一般worker线程数与核心数相同,每个worker线程处理所有已配置的listene ...
- 【Jenkins】忘记admin密码,可以用此方法帮你解决
突然有一日发现自己忘记了jenkins的管理员密码,因为我一直登录的是另外一个非管理员账户.如果出现必须要使用管理员账户操作的,比如用户管理那里的,必须要管理员账号吧,这就尴尬了. 很方的我打开安装j ...
- python_面向对象——类之间的依赖关系
class Dog: def __init__(self,name,age,master): self.name = name self.age = age self.master = master ...