zoukankan      html  css  js  c++  java
  • openresty lua-resty-string md5 sha aes random string

    安装 https://github.com/openresty/lua-resty-string

    $ sudo opm get openresty/lua-resty-string
    $ ls -al /usr/local/openresty/site/lualib/resty/
    总用量 100
    drwxr-xr-x 3 root root  4096 9月  16 20:47 .
    drwxr-xr-x 3 root root  4096 9月   8 07:38 ..
    -rw-r--r-- 1 root root  6129 9月  16 20:47 aes.lua
    -rw-r--r-- 1 root root  1150 9月  11 19:10 http_headers.lua
    -rw-r--r-- 1 root root 29686 9月  11 19:10 http.lua
    drwxr-xr-x 2 root root  4096 9月  10 21:32 lrucache
    -rw-r--r-- 1 root root  5727 9月  10 21:32 lrucache.lua
    -rw-r--r-- 1 root root  1211 9月  16 20:47 md5.lua
    -rw-r--r-- 1 root root   616 9月  16 20:47 random.lua
    -rw-r--r-- 1 root root  1192 9月  16 20:47 sha1.lua
    -rw-r--r-- 1 root root  1045 9月  16 20:47 sha224.lua
    -rw-r--r-- 1 root root  1221 9月  16 20:47 sha256.lua
    -rw-r--r-- 1 root root  1045 9月  16 20:47 sha384.lua
    -rw-r--r-- 1 root root  1359 9月  16 20:47 sha512.lua
    -rw-r--r-- 1 root root   236 9月  16 20:47 sha.lua
    -rw-r--r-- 1 root root   698 9月  16 20:47 string.lua
    

    可以看出目录下多出了这几个文件:aes.lua md5.lua random.lua sha.lua sha1.lua sha224.lua sha256.lua sha384.lua sha512.lua string.lua

    测试文件 test.lua

    local resty_sha1 = require "resty.sha1"
    
    local sha1 = resty_sha1:new()
    if not sha1 then
        ngx.say("failed to create the sha1 object")
        return
    end
    
    local ok = sha1:update("hello, ")
    if not ok then
        ngx.say("failed to add data")
        return
    end
    
    ok = sha1:update("world")
    if not ok then
        ngx.say("failed to add data")
        return
    end
    
    local digest = sha1:final()  -- binary digest
    
    local str = require "resty.string"
    ngx.say("sha1: ", str.to_hex(digest))
        -- output: "sha1: b7e23ec29af22b0b4e41da31e868d57226121c84"
    
    local resty_md5 = require "resty.md5"
    local md5 = resty_md5:new()
    if not md5 then
        ngx.say("failed to create md5 object")
        return
    end
    
    local ok = md5:update("hel")
    if not ok then
        ngx.say("failed to add data")
        return
    end
    
    ok = md5:update("lo")
    if not ok then
        ngx.say("failed to add data")
        return
    end
    
    local digest = md5:final()
    
    local str = require "resty.string"
    ngx.say("md5: ", str.to_hex(digest))
        -- yield "md5: 5d41402abc4b2a76b9719d911017c592"
    
    local resty_sha224 = require "resty.sha224"
    local str = require "resty.string"
    local sha224 = resty_sha224:new()
    ngx.say(sha224:update("hello"))
    local digest = sha224:final()
    ngx.say("sha224: ", str.to_hex(digest))
    
    local resty_sha256 = require "resty.sha256"
    local str = require "resty.string"
    local sha256 = resty_sha256:new()
    ngx.say(sha256:update("hello"))
    local digest = sha256:final()
    ngx.say("sha256: ", str.to_hex(digest))
    
    local resty_sha512 = require "resty.sha512"
    local str = require "resty.string"
    local sha512 = resty_sha512:new()
    ngx.say(sha512:update("hello"))
    local digest = sha512:final()
    ngx.say("sha512: ", str.to_hex(digest))
    
    local resty_sha384 = require "resty.sha384"
    local str = require "resty.string"
    local sha384 = resty_sha384:new()
    ngx.say(sha384:update("hel"))
    ngx.say(sha384:update("lo"))
    local digest = sha384:final()
    ngx.say("sha384: ", str.to_hex(digest))
    
    local resty_random = require "resty.random"
    local str = require "resty.string"
    local random = resty_random.bytes(16)
        -- generate 16 bytes of pseudo-random data
    ngx.say("pseudo-random: ", str.to_hex(random))
    
    local resty_random = require "resty.random"
    local str = require "resty.string"
    local strong_random = resty_random.bytes(16,true)
        -- attempt to generate 16 bytes of
        -- cryptographically strong random data
    while strong_random == nil do
        strong_random = resty_random.bytes(16,true)
    end
    ngx.say("random: ", str.to_hex(strong_random))
    
    local aes = require "resty.aes"
    local str = require "resty.string"
    local aes_128_cbc_md5 = aes:new("AKeyForAES")
        -- the default cipher is AES 128 CBC with 1 round of MD5
        -- for the key and a nil salt
    local encrypted = aes_128_cbc_md5:encrypt("Secret message!")
    ngx.say("AES 128 CBC (MD5) Encrypted HEX: ", str.to_hex(encrypted))
    ngx.say("AES 128 CBC (MD5) Decrypted: ", aes_128_cbc_md5:decrypt(encrypted))
    
    local aes = require "resty.aes"
    local str = require "resty.string"
    local aes_256_cbc_sha512x5 = aes:new("AKeyForAES-256-CBC",
        "MySalt!!", aes.cipher(256,"cbc"), aes.hash.sha512, 5)
        -- AES 256 CBC with 5 rounds of SHA-512 for the key
        -- and a salt of "MySalt!!"
        -- Note: salt can be either nil or exactly 8 characters long
    local encrypted = aes_256_cbc_sha512x5:encrypt("Really secret message!")
    ngx.say("AES 256 CBC (SHA-512, salted) Encrypted HEX: ", str.to_hex(encrypted))
    ngx.say("AES 256 CBC (SHA-512, salted) Decrypted: ",
        aes_256_cbc_sha512x5:decrypt(encrypted))
    
    local aes = require "resty.aes"
    local str = require "resty.string"
    local aes_128_cbc_with_iv = assert(aes:new("1234567890123456", nil, aes.cipher(128,"cbc"), {iv="1234567890123456"}))
        -- AES 128 CBC with IV and no SALT
    local encrypted = aes_128_cbc_with_iv:encrypt("Really secret message!")
    ngx.say("AES 128 CBC (WITH IV) Encrypted HEX: ", str.to_hex(encrypted))
    ngx.say("AES 128 CBC (WITH IV) Decrypted: ", aes_128_cbc_with_iv:decrypt(encrypted))
    

    测试

    $ resty test.lua
    sha1: b7e23ec29af22b0b4e41da31e868d57226121c84
    md5: 5d41402abc4b2a76b9719d911017c592
    true
    sha224: ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193
    true
    sha256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
    true
    sha512: 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
    true
    true
    sha384: 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f
    pseudo-random: 4c1f6d82cba1d0441b8f96c6cc0a8183
    random: 5558eeac062e63c4304c40532129d9de
    AES 128 CBC (MD5) Encrypted HEX: 6d87d6b11c6bf0dcb76d1aa611520b3c
    AES 128 CBC (MD5) Decrypted: Secret message!
    AES 256 CBC (SHA-512, salted) Encrypted HEX: 02997c9c6eb26af1a335ed8c11d53df3bf127086ecbba02fb73391bcf385bd2c
    AES 256 CBC (SHA-512, salted) Decrypted: Really secret message!
    AES 128 CBC (WITH IV) Encrypted HEX: f9fa30df0325a7680327842c6a232e7838f7149d80cb8a669cf503a45afc2fa5
    AES 128 CBC (WITH IV) Decrypted: Really secret message!
    
  • 相关阅读:
    Ansible中文权威指南学习
    gitlab
    Python-Day01-task
    Python-Day01
    CentOs6.7 python2.6升级到2.7.11
    网站访问慢排查方法及解决方案
    LAMP环境下zabbix安装配置
    监控知识点概述
    Java抽象类、接口和内部类
    Java 访问控制
  • 原文地址:https://www.cnblogs.com/hangj/p/11530384.html
Copyright © 2011-2022 走看看