跳转至

通用加解密函数(crypto)

一、加解密概述

加解密算法是保证数据安全的基础技术,无论是在数据传输、存储,还是用户身份验证中,都起着至关重要的作用.随着互联网的发展和信息安全威胁的增加,了解并掌握常用的加解密算法已经成为开发者和安全从业者的必修课.

常见的 15 种加密解密算法分别是:散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、Triple DES),AES、,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape.

【三种分类】

1、对称加密:对称加密是指加密和解密使用同一个密钥的加密方法.由于加密和解密过程中的密钥相同,因此需要在通信双方之间安全地共享密钥.对称加密的速度较快,适合用于大量数据的加密

2、非对称加密:非对称加密算法采用一对密钥:公钥和私钥.公钥用于加密,私钥用于解密.由于加密和解密使用不同的密钥,非对称加密算法解决了密钥分发的问题,是当前加密系统中安全性最高的加密技术之一.

3、Hash 算法,这是一种不可逆的算法,它常用于验证数据的完整性

二、演示功能概述

本文章通过 Air780EPM 的核心板烧录 LuatOS 示例代码(点此链接查看 crypto 的 demo 例子),来演示有关加解密的各种 API 的功能.

API 的具体用法,读者可以参考本文中的"五、API 说明".

三、准备硬件环境

参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。

四、软件环境

“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。

1. Luatools工具

2. 内核固件文件(底层core固件文件):LuatOS-SoC_V2003_Air780EPM;参考项目使用的内核固件

3. luatos需要的脚本和资源文件

脚本和资源文件点我,查看demo链接

lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件;

准备好软件环境之后,接下来查看如何烧录项目文件到Air780EPM核心板,将本篇文章中演示使用的项目文件烧录到Air780EPM核心板中。

五、API 说明

点我,查看API接口说明

六、功能验证

6.1 例程

参考以下示例,本库有专属 demo,点此链接查看 crypto 的 demo 例子

sys.taskInit(function()

    sys.wait(1000)

    -- MD5,输出结果已经hex编码
    log.info("md5", crypto.md5("abc"))
    log.info("hmac_md5", crypto.hmac_md5("abc", "1234567890"))

    -- SHA1,输出结果已经hex编码
    log.info("sha1", crypto.sha1("abc"))
    log.info("hmac_sha1", crypto.hmac_sha1("abc", "1234567890"))

    -- SHA256,输出结果已经hex编码
    log.info("sha256", crypto.sha256("abc"))
    log.info("hmac_sha256", crypto.hmac_sha256("abc", "1234567890"))

    -- SHA512,输出结果已经hex编码
    log.info("sha512", crypto.sha512("abc"))
    log.info("hmac_sha512", crypto.hmac_sha512("abc", "1234567890"))

        local data_encrypt = crypto.cipher_encrypt("AES-128-ECB", "ZERO", "023001", "HZBIT@WLW/YSBKEY")
        log.info("AES", "aes-128-ecb", data_encrypt:toHex())
        local data_decrypt = crypto.cipher_decrypt("AES-128-ECB", "ZERO", data_encrypt, "HZBIT@WLW/YSBKEY")
        log.info("AES", "aes-128-ecb", data_decrypt)

    -- AES加密, 未经Hex编码. AES-128-ECB 算法,待加密字符串如果超过32字节会报错,待查. by wendal 20200812
    local data_encrypt = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "12345678901234 > 123456", "1234567890123456")
    local data2_encrypt = crypto.cipher_encrypt("AES-128-CBC", "PKCS7", "12345678901234 > 123456", "1234567890123456", "1234567890666666")
    log.info("AES", "aes-128-ecb", data_encrypt:toHex())
    log.info("AES", "aes-128-cbc", data2_encrypt:toHex())

    -- AES解密, 未经Hex编码
    local data_decrypt = crypto.cipher_decrypt("AES-128-ECB", "PKCS7", data_encrypt, "1234567890123456")
    local data2_decrypt = crypto.cipher_decrypt("AES-128-CBC", "PKCS7", data2_encrypt, "1234567890123456", "1234567890666666")
    log.info("AES", "aes-128-ecb", data_decrypt)
    log.info("AES", "aes-128-cbc", data2_decrypt)
    log.info("mem", rtos.meminfo("sys"))

    -- DES-ECB 加解密
    local data1 = crypto.cipher_encrypt("DES-ECB", "PKCS7", "abcdefg", "12345678")
    if data1 then -- DES-ECB 在某些平台不支持的
        log.info("des", data1:toHex())
        local data2 = crypto.cipher_decrypt("DES-ECB", "PKCS7", data1, "12345678")
        log.info("des", data2)
    else
        log.info("des", "当前固件不支持DES/3DES")
    end

    -- 3DES-ECB 加解密
    local data1 = crypto.cipher_encrypt("DES-EDE3-ECB", "PKCS7", "abcdefg!!--ZZSS", "123456781234567812345678")
    if data1 then -- DES-ECB 在某些平台不支持的
        log.info("3des", data1:toHex())
        local data2 = crypto.cipher_decrypt("DES-EDE3-ECB", "PKCS7", data1, "123456781234567812345678")
        log.info("3des", data2)
    else
        log.info("3des", "当前固件不支持DES/3DES")
    end


    -- 打印所有支持的cipher
    if crypto.cipher_list then
        log.info("cipher", "list", json.encode(crypto.cipher_list()))
    else
        log.info("cipher", "当前固件不支持crypto.cipher_list")
    end
    -- 打印所有支持的cipher suites
    if crypto.cipher_suites then
        log.info("cipher", "suites", json.encode(crypto.cipher_suites()))
    else
        log.info("cipher", "当前固件不支持crypto.cipher_suites")
    end

    -- ---------------------------------------
    log.info("随机数测试")
    for i=1, 10 do
        sys.wait(100)
        log.info("crypto", "真随机数",string.unpack("I",crypto.trng(4)))
         log.info("crypto", "伪随机数",math.random()) -- 输出的是浮点数,不推荐
         log.info("crypto", "伪随机数",math.random(1, 65525)) -- 不推荐
    end

    -- totp的密钥
    log.info("totp的密钥")
    local secret = "VK54ZXPO74ISEM2E"
    --写死时间戳用来测试
    local ts = 1646796576
    --生成十分钟的动态码验证下
    for i=1,600,30 do
        local r = crypto.totp(secret,ts+i)
        local time = os.date("*t",ts+i + 8*3600)--东八区
        log.info("totp", string.format("%06d" ,r),time.hour,time.min,time.sec)
    end

    -- 文件测试
    log.info("文件hash值测试")
    if crypto.md_file then
        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"))

        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"))
    else
        log.info("文件hash值测试", "当前固件不支持crypto.md_file")
    end

    -- if crypto.checksum then
    --     log.info("checksum", "OK", string.char(crypto.checksum("OK")):toHex())
    --     log.info("checksum", "357E", string.char(crypto.checksum("357E", 1)):toHex())
    -- else
    --     log.info("checksum", "当前固件不支持crypto.checksum")
    -- end

    -- 流式hash测试
    log.info("流式hash测试")
    if crypto.hash_init then
        -- MD5
        local md5_obj = crypto.hash_init("MD5")
        crypto.hash_update(md5_obj, "1234567890")
        crypto.hash_update(md5_obj, "1234567890")
        crypto.hash_update(md5_obj, "1234567890")
        crypto.hash_update(md5_obj, "1234567890")
        local md5_result = crypto.hash_finish(md5_obj)
        log.info("md5_stream", md5_result)
        log.info("md5", crypto.md5("1234567890123456789012345678901234567890"))

        -- HMAC_MD5
        local hmac_md5_obj = crypto.hash_init("MD5", "1234567890")
        crypto.hash_update(hmac_md5_obj, "1234567890")
        crypto.hash_update(hmac_md5_obj, "1234567890")
        crypto.hash_update(hmac_md5_obj, "1234567890")
        crypto.hash_update(hmac_md5_obj, "1234567890")
        local hmac_md5_result = crypto.hash_finish(hmac_md5_obj)
        log.info("hmac_md5_stream", hmac_md5_result)
        log.info("hmac_md5", crypto.hmac_md5("1234567890123456789012345678901234567890", "1234567890"))

        -- SHA1
        local sha1_obj = crypto.hash_init("SHA1")
        crypto.hash_update(sha1_obj, "1234567890")
        crypto.hash_update(sha1_obj, "1234567890")
        crypto.hash_update(sha1_obj, "1234567890")
        crypto.hash_update(sha1_obj, "1234567890")
        local sha1_result = crypto.hash_finish(sha1_obj)
        log.info("sha1_stream", sha1_result)
        log.info("sha1", crypto.sha1("1234567890123456789012345678901234567890"))

        -- HMAC_SHA1
        local hmac_sha1_obj = crypto.hash_init("SHA1", "1234567890")
        crypto.hash_update(hmac_sha1_obj, "1234567890")
        crypto.hash_update(hmac_sha1_obj, "1234567890")
        crypto.hash_update(hmac_sha1_obj, "1234567890")
        crypto.hash_update(hmac_sha1_obj, "1234567890")
        local hmac_sha1_result = crypto.hash_finish(hmac_sha1_obj)
        log.info("hmac_sha1_stream", hmac_sha1_result)
        log.info("hmac_sha1", crypto.hmac_sha1("1234567890123456789012345678901234567890", "1234567890"))

        -- SHA256
        local sha256_obj = crypto.hash_init("SHA256")
        crypto.hash_update(sha256_obj, "1234567890")
        crypto.hash_update(sha256_obj, "1234567890")
        crypto.hash_update(sha256_obj, "1234567890")
        crypto.hash_update(sha256_obj, "1234567890")
        local sha256_result = crypto.hash_finish(sha256_obj)
        log.info("sha256_stream", sha256_result)
        log.info("sha256", crypto.sha256("1234567890123456789012345678901234567890"))

        -- HMAC_SHA256
        local hmac_sha256_obj = crypto.hash_init("SHA256", "1234567890")
        crypto.hash_update(hmac_sha256_obj, "1234567890")
        crypto.hash_update(hmac_sha256_obj, "1234567890")
        crypto.hash_update(hmac_sha256_obj, "1234567890")
        crypto.hash_update(hmac_sha256_obj, "1234567890")
        local hmac_sha256_result = crypto.hash_finish(hmac_sha256_obj)
        log.info("hmac_sha256_stream", hmac_sha256_result)
        log.info("hmac_sha256", crypto.hmac_sha256("1234567890123456789012345678901234567890", "1234567890"))

        -- SHA512
        local sha512_obj = crypto.hash_init("SHA512")
        if sha512_obj then
            crypto.hash_update(sha512_obj, "1234567890")
            crypto.hash_update(sha512_obj, "1234567890")
            crypto.hash_update(sha512_obj, "1234567890")
            crypto.hash_update(sha512_obj, "1234567890")
            local sha512_result = crypto.hash_finish(sha512_obj)
            log.info("sha512_stream", sha512_result)
            log.info("sha512", crypto.sha512("1234567890123456789012345678901234567890"))
        end

        -- HMAC_SHA512
        local hmac_sha512_obj = crypto.hash_init("SHA512", "1234567890")
        if hmac_sha512_obj then
            crypto.hash_update(hmac_sha512_obj, "1234567890")
            crypto.hash_update(hmac_sha512_obj, "1234567890")
            crypto.hash_update(hmac_sha512_obj, "1234567890")
            crypto.hash_update(hmac_sha512_obj, "1234567890")
            local hmac_sha512_result = crypto.hash_finish(hmac_sha512_obj)
            log.info("hmac_sha512_stream", hmac_sha512_result)
            log.info("hmac_sha512", crypto.hmac_sha512("1234567890123456789012345678901234567890", "1234567890"))
        end
    else
        log.info("crypto", "当前固件不支持crypto.hash_init")
    end

   log.info("crc7测试")
    if crypto.crc7 then
        local result = crypto.crc7(string.char(0xAA), 0xE5, 0x00)
        log.info("crc7测试", result, string.format("%02X", result))
    else
        log.info("crypto", "当前固件不支持crypto.crc7")
    end

    log.info("crypto", "ALL Done")
    sys.wait(100000)
end)

6.3 对应 log

[2024-10-18 10:28:48.224][000000001.281] I/user.md5        900150983CD24FB0D6963F7D28E17F72
[2024-10-18 10:28:48.226][000000001.283] I/user.hmac_md5        416478FC0ACE1C4AB37F85F4F86A16B1
[2024-10-18 10:28:48.228][000000001.284] I/user.sha1        A9993E364706816ABA3E25717850C26C9CD0D89D
[2024-10-18 10:28:48.229][000000001.285] I/user.hmac_sha1        DAE54822C0DAF6C115C97B0AD62C7BCBE9D5E6FC
[2024-10-18 10:28:48.230][000000001.287] I/user.sha256        BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD
[2024-10-18 10:28:48.231][000000001.288] I/user.hmac_sha256        86055184805B4A466A7BE398FF4A7159F9055EA7EEF339FC94DCEC6F165898BA
[2024-10-18 10:28:48.232][000000001.289] I/user.sha512        DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F
[2024-10-18 10:28:48.233][000000001.292] I/user.hmac_sha512        0F92B9AC88949E0BF7C9F1E6F9901BAB8EDFDC9E561DFDE428BC4339961A0569AD01B44343AA56E439949655D15C4D28492D459E75015489920243F3C9986F2A
[2024-10-18 10:28:48.236][000000001.293] D/crypto zero padding
[2024-10-18 10:28:48.237][000000001.294] I/user.AES        aes-128-ecb        013EEA6EBACCBD7AD990FAEF75FB99C4        32
[2024-10-18 10:28:48.238][000000001.295] I/user.AES        aes-128-ecb        023001
[2024-10-18 10:28:48.240][000000001.297] I/user.AES        aes-128-ecb        A37DE67837A1A3006E47A7BC25AA0ECC030B4E058E1972FE5B257FD8C3436142        64
[2024-10-18 10:28:48.242][000000001.298] I/user.AES        aes-128-cbc        26D98EA512AE92BC487536B83F2BE99B467649A9700338F4B4FF75AA2654DD2C        64
[2024-10-18 10:28:48.243][000000001.300] I/user.AES        aes-128-ecb        12345678901234 > 123456
[2024-10-18 10:28:48.245][000000001.300] I/user.AES        aes-128-cbc        12345678901234 > 123456
[2024-10-18 10:28:48.246][000000001.301] I/user.mem        277872        52116        81264
[2024-10-18 10:28:48.247][000000001.303] I/user.des        486CB8B81CACCDB7        16
[2024-10-18 10:28:48.249][000000001.304] I/user.des        abcdefg
[2024-10-18 10:28:48.250][000000001.306] I/user.3des        14619F067B425995D0CD975B85491D98        32
[2024-10-18 10:28:48.251][000000001.308] I/user.3des        abcdefg!!--ZZSS
[2024-10-18 10:28:48.254][000000001.311] I/user.cipher        list        ["AES-128-ECB","AES-192-ECB","AES-256-ECB","AES-128-CBC","AES-192-CBC","AES-256-CBC","AES-128-CTR","AES-192-CTR","AES-256-CTR","AES-128-GCM","AES-192-GCM","AES-256-GCM","AES-128-CCM","AES-192-CCM","AES-256-CCM","DES-ECB","DES-EDE-ECB","DES-EDE3-ECB","DES-CBC","DES-EDE-CBC","DES-EDE3-CBC"]
[2024-10-18 10:28:48.271][000000001.322] I/user.cipher        suites
[2024-10-18 10:28:48.276][000000001.322] ["TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384","TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384","TLS-ECDHE-ECDSA-WITH-AES-256-CCM","TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384","TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384","TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA","TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA","TLS-ECDHE-ECDSA-WITH-AES-256-CCM-8","TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256","TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256","TLS-ECDHE-ECDSA-WITH-AES-128-CCM","TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256","TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256","TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA","TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA","TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8","TLS-RSA-WITH-AES-256-GCM-SHA384","TLS-RSA-WITH-AES-256-CCM","TLS-RSA-WITH-AES-256-CBC-SHA256","TLS-RSA-WITH-AES-256-CBC-SHA","TLS-RSA-WITH-AES-256-CCM-8","TLS-RSA-WITH-AES-128-GCM-SHA256","TLS-RSA-WITH-AES-128-CCM","TLS-RSA-WITH-AES-128-CBC-SHA256","TLS-RSA-WITH-AES-128-CBC-SHA","TLS-RSA-WITH-AES-128-CCM-8","TLS-RSA-PSK-WITH-AES-256-GCM-SHA384","TLS-RSA-PSK-WITH-AES-256-CBC-SHA384","TLS-RSA-PSK-WITH-AES-256-CBC-SHA","TLS-RSA-PSK-WITH-AES-128-GCM-SHA256","TLS-RSA-PSK-WITH-AES-128-CBC-SHA256","TLS-RSA-PSK-WITH-AES-128-CBC-SHA","TLS-PSK-WITH-AES-256-GCM-SHA384","TLS-PSK-WITH-AES-256-CCM","TLS-PSK-WITH-AES-256-CBC-SHA384","TLS-PSK-WITH-AES-256-CBC-SHA","TLS-PSK-WITH-AES-256-CCM-8","TLS-PSK-WITH-AES-128-GCM-SHA256","TLS-PSK-WITH-AES-128-CCM","TLS-PSK-WITH-AES-128-CBC-SHA256","TLS-PSK-WITH-AES-128-CBC-SHA","TLS-PSK-WITH-AES-128-CCM-8"]
[2024-10-18 10:28:48.286][000000001.324] I/user.随机数测试
[2024-10-18 10:28:48.379][000000001.433] I/user.crypto        真随机数        261494196        5
[2024-10-18 10:28:48.384][000000001.434] I/user.crypto        伪随机数        0.6484701
[2024-10-18 10:28:48.388][000000001.435] I/user.crypto        伪随机数        19789
[2024-10-18 10:28:48.490][000000001.537] I/user.crypto        真随机数        486511786        5
[2024-10-18 10:28:48.493][000000001.538] I/user.crypto        伪随机数        0.2389479
[2024-10-18 10:28:48.495][000000001.539] I/user.crypto        伪随机数        5261
[2024-10-18 10:28:48.598][000000001.650] I/user.crypto        真随机数        1880424108        5
[2024-10-18 10:28:48.602][000000001.651] I/user.crypto        伪随机数        0.4170769
[2024-10-18 10:28:48.604][000000001.652] I/user.crypto        伪随机数        18390
[2024-10-18 10:28:48.691][000000001.753] I/user.crypto        真随机数        263035101        5
[2024-10-18 10:28:48.694][000000001.754] I/user.crypto        伪随机数        0.3004813
[2024-10-18 10:28:48.697][000000001.755] I/user.crypto        伪随机数        37550
[2024-10-18 10:28:48.817][000000001.865] I/user.crypto        真随机数        1468703251        5
[2024-10-18 10:28:48.822][000000001.866] I/user.crypto        伪随机数        0.3768688
[2024-10-18 10:28:48.824][000000001.867] I/user.crypto        伪随机数        15383
[2024-10-18 10:28:48.910][000000001.969] I/user.crypto        真随机数        -1162628970        5
[2024-10-18 10:28:48.914][000000001.971] I/user.crypto        伪随机数        0.1866591
[2024-10-18 10:28:48.915][000000001.972] I/user.crypto        伪随机数        21033
[2024-10-18 10:28:49.033][000000002.081] I/user.crypto        真随机数        -963368157        5
[2024-10-18 10:28:49.035][000000002.082] I/user.crypto        伪随机数        0.5439283
[2024-10-18 10:28:49.038][000000002.084] I/user.crypto        伪随机数        36118
[2024-10-18 10:28:49.128][000000002.185] I/user.crypto        真随机数        1180427239        5
[2024-10-18 10:28:49.130][000000002.186] I/user.crypto        伪随机数        0.9506377
[2024-10-18 10:28:49.132][000000002.187] I/user.crypto        伪随机数        44024
[2024-10-18 10:28:49.237][000000002.297] I/user.crypto        真随机数        1100990233        5
[2024-10-18 10:28:49.239][000000002.298] I/user.crypto        伪随机数        0.6049858
[2024-10-18 10:28:49.241][000000002.299] I/user.crypto        伪随机数        61459
[2024-10-18 10:28:49.347][000000002.401] I/user.crypto        真随机数        -1319279350        5
[2024-10-18 10:28:49.349][000000002.402] I/user.crypto        伪随机数        0.5302082
[2024-10-18 10:28:49.351][000000002.403] I/user.crypto        伪随机数        41229
[2024-10-18 10:28:49.353][000000002.404] I/user.totp的密钥
[2024-10-18 10:28:49.356][000000002.406] I/user.totp        522113        19        29        37
[2024-10-18 10:28:49.358][000000002.408] I/user.totp        964300        19        30        7
[2024-10-18 10:28:49.360][000000002.411] I/user.totp        987714        19        30        37
[2024-10-18 10:28:49.363][000000002.413] I/user.totp        037499        19        31        7
[2024-10-18 10:28:49.364][000000002.415] I/user.totp        699697        19        31        37
[2024-10-18 10:28:49.366][000000002.417] I/user.totp        548191        19        32        7
[2024-10-18 10:28:49.368][000000002.419] I/user.totp        747517        19        32        37
[2024-10-18 10:28:49.371][000000002.421] I/user.totp        243319        19        33        7
[2024-10-18 10:28:49.373][000000002.423] I/user.totp        147474        19        33        37
[2024-10-18 10:28:49.376][000000002.425] I/user.totp        039992        19        34        7
[2024-10-18 10:28:49.378][000000002.427] I/user.totp        628512        19        34        37
[2024-10-18 10:28:49.379][000000002.429] I/user.totp        529018        19        35        7
[2024-10-18 10:28:49.382][000000002.431] I/user.totp        994006        19        35        37
[2024-10-18 10:28:49.384][000000002.433] I/user.totp        851359        19        36        7
[2024-10-18 10:28:49.386][000000002.435] I/user.totp        943237        19        36        37
[2024-10-18 10:28:49.388][000000002.437] I/user.totp        410702        19        37        7
[2024-10-18 10:28:49.391][000000002.440] I/user.totp        082993        19        37        37
[2024-10-18 10:28:49.392][000000002.442] I/user.totp        193281        19        38        7
[2024-10-18 10:28:49.394][000000002.444] I/user.totp        781573        19        38        37
[2024-10-18 10:28:49.395][000000002.446] I/user.totp        243288        19        39        7
[2024-10-18 10:28:49.396][000000002.447] I/user.文件hash值测试
[2024-10-18 10:28:49.408][000000002.454] I/user.md5        D364D04CCD734D2757B25F3216CC431B
[2024-10-18 10:28:49.409][000000002.462] I/user.sha1        04DA64874D415B1FB9CDD2E89927397D8F48C441
[2024-10-18 10:28:49.440][000000002.483] I/user.sha256        0C601722B4BD2BC1A76BC3701F4EB646F5119C31702852978C326CD8D7C9212C
[2024-10-18 10:28:49.443][000000002.490] I/user.hmac_md5        B5F5A687DB904DB67D3311899932DD61
[2024-10-18 10:28:49.446][000000002.499] I/user.hmac_sha1        2A0B55C290D54ADF2F185EAE460254D267C7CE1F
[2024-10-18 10:28:49.472][000000002.520] I/user.hmac_sha256        6E443C84D4D7A4721A9A195EB9038EDCFA8A8F60A3F1E8A0090B57B3BAB4942E
[2024-10-18 10:28:49.475][000000002.521] I/user.流式hash测试
[2024-10-18 10:28:49.478][000000002.523] I/user.md5_stream        F5BF3E984432AE6F9F98840951E5CEF3
[2024-10-18 10:28:49.481][000000002.524] I/user.md5        F5BF3E984432AE6F9F98840951E5CEF3
[2024-10-18 10:28:49.483][000000002.526] I/user.hmac_md5_stream        45527D9407615C3A44F475BB7172752A
[2024-10-18 10:28:49.487][000000002.527] I/user.hmac_md5        45527D9407615C3A44F475BB7172752A
[2024-10-18 10:28:49.490][000000002.529] I/user.sha1_stream        C61A2C245CB07A04482CE5B662AE67DBDBE010DB
[2024-10-18 10:28:49.491][000000002.530] I/user.sha1        C61A2C245CB07A04482CE5B662AE67DBDBE010DB
[2024-10-18 10:28:49.492][000000002.532] I/user.hmac_sha1_stream        88471065B8C5F64057418A0A58353A46E7841DE7
[2024-10-18 10:28:49.494][000000002.533] I/user.hmac_sha1        88471065B8C5F64057418A0A58353A46E7841DE7
[2024-10-18 10:28:49.496][000000002.535] I/user.sha256_stream        A4EBDD541454B84CC670C9F1F5508BAF67FFD3FE59B883267808781F992A0B1D
[2024-10-18 10:28:49.497][000000002.536] I/user.sha256        A4EBDD541454B84CC670C9F1F5508BAF67FFD3FE59B883267808781F992A0B1D
[2024-10-18 10:28:49.498][000000002.538] I/user.hmac_sha256_stream        EAF715932F064E462893B7FE04442E2C25ECF2F7C560820A648D0D94BEAEB581
[2024-10-18 10:28:49.500][000000002.540] I/user.hmac_sha256        EAF715932F064E462893B7FE04442E2C25ECF2F7C560820A648D0D94BEAEB581
[2024-10-18 10:28:49.501][000000002.542] I/user.sha512_stream        3A8529D8F0C7B1AD2FA54C944952829B718D5BEB4FF9BA8F4A849E02FE9A272DAF59AE3BD06DDE6F01DF863D87C8BA4AB016AC576B59A19078C26D8DBE63F79E
[2024-10-18 10:28:49.502][000000002.543] I/user.sha512        3A8529D8F0C7B1AD2FA54C944952829B718D5BEB4FF9BA8F4A849E02FE9A272DAF59AE3BD06DDE6F01DF863D87C8BA4AB016AC576B59A19078C26D8DBE63F79E
[2024-10-18 10:28:49.504][000000002.546] I/user.hmac_sha512_stream        18F74340A0048090521796F52A66A45B77AF5981512951B938BFCB026F2D6ED7945B0682731E4E7E3CA72021E5E8AB9810769E48C83F440DC73D6C942215E29E
[2024-10-18 10:28:49.507][000000002.548] I/user.hmac_sha512        18F74340A0048090521796F52A66A45B77AF5981512951B938BFCB026F2D6ED7945B0682731E4E7E3CA72021E5E8AB9810769E48C83F440DC73D6C942215E29E
[2024-10-18 10:28:49.509][000000002.549] I/user.crc7测试
[2024-10-18 10:28:49.510][000000002.550] I/user.crc7测试        124        7C
[2024-10-18 10:28:49.513][000000002.551] I/user.crypto        ALL Done

七、总结

通过本章内容的学习,你可以学习到有关加解密算法的函数,例如:crypto.md5(str)、crypto.hmac_md5(str, key)、crypto.hmac_sha1(str, key) 等等函数。