• LuatOS-SOC接口文档(air780E)--crypto - 加解密和hash函数


    crypto.md5(str)

    计算md5值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    返回值

    返回值类型

    解释

    string

    计算得出的md5值的hex字符串

    例子

    -- 计算字符串"abc"的md5
    log.info("md5", crypto.md5("abc"))
    

    crypto.hmac_md5(str, key)

    计算hmac_md5值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    string

    密钥

    返回值

    返回值类型

    解释

    string

    计算得出的hmac_md5值的hex字符串

    例子

    -- 计算字符串"abc"的hmac_md5
    log.info("hmac_md5", crypto.hmac_md5("abc", "1234567890"))
    

    crypto.sha1(str)

    计算sha1值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    返回值

    返回值类型

    解释

    string

    计算得出的sha1值的hex字符串

    例子

    -- 计算字符串"abc"的sha1
    log.info("sha1", crypto.sha1("abc"))
    

    crypto.hmac_sha1(str, key)

    计算hmac_sha1值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    string

    密钥

    返回值

    返回值类型

    解释

    string

    计算得出的hmac_sha1值的hex字符串

    例子

    -- 计算字符串"abc"的hmac_sha1
    log.info("hmac_sha1", crypto.hmac_sha1("abc", "1234567890"))
    

    crypto.sha256(str)

    计算sha256值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    返回值

    返回值类型

    解释

    string

    计算得出的sha256值的hex字符串

    例子

    -- 计算字符串"abc"的sha256
    log.info("sha256", crypto.sha256("abc"))
    

    crypto.hmac_sha256(str, key)

    计算hmac_sha256值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    string

    密钥

    返回值

    返回值类型

    解释

    string

    计算得出的hmac_sha256值的hex字符串

    例子

    -- 计算字符串"abc"的hmac_sha256
    log.info("hmac_sha256", crypto.hmac_sha256("abc", "1234567890"))
    

    crypto.sha512(str)

    计算sha512值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    返回值

    返回值类型

    解释

    string

    计算得出的sha512值的hex字符串

    例子

    -- 计算字符串"abc"的sha512
    log.info("sha512", crypto.sha512("abc"))
    

    crypto.hmac_sha512(str, key)

    计算hmac_sha512值

    参数

    传入值类型

    解释

    string

    需要计算的字符串

    string

    密钥

    返回值

    返回值类型

    解释

    string

    计算得出的hmac_sha512值的hex字符串

    例子

    -- 计算字符串"abc"的hmac_sha512
    log.info("hmac_sha512", crypto.hmac_sha512("abc", "1234567890"))
    

    crypto.cipher_encrypt(type, padding, str, key, iv)

    对称加密

    参数

    传入值类型

    解释

    string

    算法名称, 例如 AES-128-ECB/AES-128-CBC, 可查阅crypto.cipher_list()

    string

    对齐方式, 支持PKCS7/ZERO/ONE_AND_ZEROS/ZEROS_AND_LEN/NONE

    string

    需要加密的数据

    string

    密钥,需要对应算法的密钥长度

    string

    IV值, 非ECB算法需要

    返回值

    返回值类型

    解释

    string

    加密后的字符串

    例子

    -- 计算AES
    local data = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "1234567890123456", "1234567890123456")
    local data2 = crypto.cipher_encrypt("AES-128-CBC", "PKCS7", "1234567890123456", "1234567890123456", "1234567890666666")
    

    crypto.cipher_decrypt(type, padding, str, key, iv)

    对称解密

    参数

    传入值类型

    解释

    string

    算法名称, 例如 AES-128-ECB/AES-128-CBC, 可查阅crypto.cipher_list()

    string

    对齐方式, 支持PKCS7/ZERO/ONE_AND_ZEROS/ZEROS_AND_LEN/NONE

    string

    需要解密的数据

    string

    密钥,需要对应算法的密钥长度

    string

    IV值, 非ECB算法需要

    返回值

    返回值类型

    解释

    string

    解密后的字符串

    例子

    -- 用AES加密,然后用AES解密
    local data = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "1234567890123456", "1234567890123456")
    local data2 = crypto.cipher_decrypt("AES-128-ECB", "PKCS7", data, "1234567890123456")
    -- data的hex为 757CCD0CDC5C90EADBEEECF638DD0000
    -- data2的值为 1234567890123456
    

    crypto.crc16(method, data, poly, initial, finally, inReversem outReverse)

    计算CRC16

    参数

    传入值类型

    解释

    string

    CRC16模式(”IBM”,”MAXIM”,”USB”,”MODBUS”,”CCITT”,”CCITT-FALSE”,”X25”,”XMODEM”,”DNP”,”USER-DEFINED”)

    string

    字符串

    int

    poly值

    int

    initial值

    int

    finally值

    int

    输入反转,1反转,默认0不反转

    int

    输入反转,1反转,默认0不反转

    返回值

    返回值类型

    解释

    int

    对应的CRC16值

    例子

    -- 计算CRC16
    local crc = crypto.crc16("")
    

    crypto.crc16_modbus(data)

    直接计算modbus的crc16值

    参数

    传入值类型

    解释

    string

    数据

    返回值

    返回值类型

    解释

    int

    对应的CRC16值

    例子

    -- 计算CRC16 modbus
    local crc = crypto.crc16_modbus(data)
    

    crypto.crc32(data)

    计算crc32值

    参数

    传入值类型

    解释

    string

    数据

    返回值

    返回值类型

    解释

    int

    对应的CRC32值

    例子

    -- 计算CRC32
    local crc = crypto.crc32(data)
    

    crypto.crc8(data)

    计算crc8值

    参数

    传入值类型

    解释

    string

    数据

    int

    crc多项式,可选,如果不写,将忽略除了数据外所有参数

    int

    crc初始值,可选,默认0

    boolean

    是否需要逆序处理,默认否

    返回值

    返回值类型

    解释

    int

    对应的CRC8值

    例子

    -- 计算CRC8
    local crc = crypto.crc8(data)
    local crc = crypto.crc8(data, 0x31, 0xff, false)
    

    crypto.trng(len)

    生成真随机数

    参数

    传入值类型

    解释

    int

    数据长度

    返回值

    返回值类型

    解释

    string

    指定随机数字符串

    例子

    -- 生成32位随机数ir
    local r = crypto.trng(4)
    local _, ir = pack.unpack(r, "I")
    

    crypto.totp(secret,time)

    计算TOTP动态密码的结果

    参数

    传入值类型

    解释

    string

    网站提供的密钥(就是BASE32编码后的结果)

    int

    可选,时间戳,默认当前时间

    返回值

    返回值类型

    解释

    int

    计算得出的六位数结果 计算失败返回nil

    例子

    --使用当前系统时间计算
    local otp = crypto.totp("asdfassdfasdfass")
    

    crypto.base64_encode(data)

    将数据进行base64编码

    参数

    传入值类型

    解释

    string

    待编码的数据

    返回值

    返回值类型

    解释

    string

    编码后的数据

    例子

    -- 本函数与 string.toBase64 是同一个
    local data = "123"
    local bdata = crypto.base64_encode(data)
    log.info("base64", "encode", data, bdata)
    data = crypto.base64_decode(data)
    log.info("base64", "decode", data, bdata)
    

    crypto.base64_decode(data)

    将数据进行base64解码

    参数

    传入值类型

    解释

    string

    待解码的数据

    返回值

    返回值类型

    解释

    string

    解码后的数据

    例子

    -- 本函数与 string.fromBase64 是同一个
    local data = "123"
    local bdata = crypto.base64_encode(data)
    log.info("base64", "encode", data, bdata)
    data = crypto.base64_decode(data)
    log.info("base64", "decode", data, bdata)
    

    crypto.cipher_list()

    获取当前固件支持的cipher列表

    参数

    返回值

    返回值类型

    解释

    table

    本固件支持的cipher列表,字符串数组

    例子

    -- 本API于2022.07.27添加
    local ciphers = crypto.cipher_list()
    if ciphers then
        log.info("crypto", "ciphers list", json.encode(ciphers))
    end
    

    crypto.cipher_suites()

    获取当前固件支持的cipher suites列表

    参数

    返回值

    返回值类型

    解释

    table

    本固件支持的cipher suites列表,字符串数组

    例子

    -- 本API于2022.11.16添加
    local suites = crypto.cipher_suites()
    if suites then
        log.info("crypto", "ciphers suites", json.encode(suites))
    end
    

    crypto.md_file(tp, path, hmac)

    计算文件的hash值(md5/sha1/sha256及hmac形式)

    参数

    传入值类型

    解释

    string

    hash类型, 大小字母, 例如 “MD5” “SHA1” “SHA256”

    string

    文件路径, 例如 /luadb/logo.jpg

    string

    hmac值,可选

    返回值

    返回值类型

    解释

    string

    HEX过的hash值,若失败会无返回值

    例子

    -- 无hmac的hash值
    log.info("md5", crypto.md_file("MD5", "/luadb/logo.jpg"))
    log.info("sha1", crypto.md_file("SHA1", "/luadb/logo.jpg"))
    log.info("sha256", crypto.md_file("SHA256", "/luadb/logo.jpg"))
    
    -- 带hmac的hash值
    log.info("hmac_md5", crypto.md_file("MD5", "/luadb/logo.jpg", "123456"))
    log.info("hmac_sha1", crypto.md_file("SHA1", "/luadb/logo.jpg", "123456"))
    log.info("hmac_sha256", crypto.md_file("SHA256", "/luadb/logo.jpg", "123456"))
    

    crypto.md(tp, data, hmac)

    计算数据的hash值(md5/sha1/sha256及hmac形式)

    参数

    传入值类型

    解释

    string

    hash类型, 大小字母, 例如 “MD5” “SHA1” “SHA256”

    string

    待处理的数据

    string

    hmac值,可选

    返回值

    返回值类型

    解释

    string

    HEX过的hash值,若失败会无返回值

    例子

    -- 无hmac的hash值
    log.info("md5", crypto.md("MD5", "1234567890"))
    log.info("sha1", crypto.md("SHA1", "1234567890"))
    log.info("sha256", crypto.md("SHA256", "1234567890"))
    
    -- 带hmac的hash值
    log.info("hmac_md5", crypto.md("MD5", "1234567890", "123456"))
    log.info("hmac_sha1", crypto.md("SHA1", "1234567890", "123456"))
    log.info("hmac_sha256", crypto.md("SHA256", "1234567890", "123456"))
    

    crypto.hash_init(tp)

    创建流式hash用的stream

    参数

    传入值类型

    解释

    string

    hash类型, 大写字母, 例如 “MD5” “SHA1” “SHA256”

    string

    hmac值,可选

    返回值

    返回值类型

    解释

    userdata

    成功返回一个数据结构,否则返回nil

    例子

    -- 无hmac的hash stream
    local md5_stream = crypto.hash_init("MD5")
    local sha1_stream = crypto.hash_init("SHA1")
    local sha256_stream = crypto.hash_init("SHA256")
    
    -- 带hmac的hash stream
    local md5_stream = crypto.hash_init("MD5", "123456")
    local sha1_stream = crypto.hash_init("SHA1", "123456")
    local sha256_stream = crypto.hash_init("SHA256", "123456")
    

    crypto.hash_update(stream, data)

    流式hash更新数据

    参数

    传入值类型

    解释

    userdata

    crypto.hash_init()创建的stream, 必选

    string

    待计算的数据,必选

    return

    返回值

    例子

    crypto.hash_update(stream, "OK")
    

    crypto.hash_finish(stream)

    获取流式hash校验值并释放创建的stream

    参数

    传入值类型

    解释

    userdata

    crypto.hash_init()创建的stream,必选

    返回值

    返回值类型

    解释

    string

    成功返回计算得出的流式hash值的hex字符串,失败无返回

    例子

    local hashResult = crypto.hash_finish(stream)
    

    crypto.checksum(data, mode)

    计算checksum校验和

    参数

    传入值类型

    解释

    string

    待计算的数据,必选

    int

    模式,累加模式, 0 - 异或, 1 - 累加, 默认为0

    返回值

    返回值类型

    解释

    int

    checksum值,校验和

    例子

    -- 本函数在 2022.12.28 添加
    -- 单纯计算checksum值
    local ck = crypto.checksum("OK")
    log.info("checksum", "ok", string.format("%02X", ck))
    -- 第二个参数mode在2023.5.23日添加
    
  • 相关阅读:
    OpenCV4经典案例实战教程 笔记
    各位帅哥美女们,请问下面这种情况怎么解决呀,网上很多方法我都试过了,都没用
    智慧安防解决方案-最新全套文件
    Python实现类属性的延迟加载装饰器
    Vue3:给表格的单元格增加超链接功能(点击单元格可以跳转到新的页面)
    海外媒体发稿:葡萄牙-实现高效媒体软文发稿计划-大舍传媒
    whois信息收集&企业备案信息
    wy的leetcode刷题记录_Day43
    【课程作业】西瓜书 机器学习课后习题 : 第七章
    POJ 3264 Balanced Lineup 线段树 / 平方分割
  • 原文地址:https://blog.csdn.net/l531798151/article/details/133048796