最近需要在openresty内对客户端上传的一段des加密数据做解密,于是搜到了lua-resty-nettle这个库。
下面记录一下关键概念和lua-resty-nettle用法。
关键概念
块
DES加密是逐块进行的,据我了解常见的都是8字节一块。
密钥
DES是对称加密,其密钥要求长度为8个字节,等于一个块的大小。
加密模式
支持多种加密模式,很常听见这些名词:ECB,CBC,CTR,OFB,CFB。
常用的是ECB和CBC。
初始化向量
英文叫做iv,第二个字母就是vector。
只有ECB不需要iv,其他加密模式要求传8字节(一个块的大小)的iv一起参与编码,起到进一步混淆加密结果的作用。
按道理iv每次加密随机生成是最好的,加密端可以将iv暴露出去,以便解密端可以基于相同的iv完成解密。
padding补齐
des要求待加密的数据也是按块大小对齐的,一般就是8字节。
当数据不够长时,加密端算法会自动补齐,当然也可以调用方主动补齐后再加密。
内置的标准补齐算法有几种:’pkcs5′,’pkcs7′,’iso10126′,’ansix923′,’zero’ 。
常见的是pkcs5,pkcs7,zero,无论它们原理是什么,目标都是补齐到8字节对齐。
加密端和解密端必须按相同的补齐算法计算,否则就会发现数据不一样。
用法
这个库只能在LuaJIT下工作,适用于openresty。
加密
lua解密