gmssl_sm2.lua 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. --[[
  2. @module gmssl_sm2
  3. @summary gmssl_sm2
  4. @version 1.0
  5. @date 2025.10.29
  6. @author 沈园园
  7. @usage
  8. 本文件为gmssl sm2应用功能模块,核心业务逻辑为:
  9. 1、演示国密sm2加密和解码的应用;
  10. 本文件没有对外接口,直接在main.lua中require "gmssl_sm2"就可以加载运行;
  11. ]]
  12. function gmssl_sm2_encrypt_decrypt(originStr, pkx, pky, private)
  13. -- GMSSL默认格式
  14. log.info("==== SM2 默认GMSSL模式")
  15. local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr)
  16. log.info("sm2默认模式", "加密后", encodeStr and string.toHex(encodeStr))
  17. if encodeStr then
  18. log.info("sm2默认模式", "解密后", gmssl.sm2decrypt(private,encodeStr))
  19. end
  20. -- 网站兼容模式 https://i.goto327.top/CryptTools/SM2.aspx
  21. -- 密文格式 C1C3C2, 新国标, 一般是这种
  22. log.info("==== SM2 网站兼容模式")
  23. local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr, true)
  24. log.info("sm2网站兼容模式 C1C3C2", "加密后", encodeStr and string.toHex(encodeStr))
  25. if encodeStr then
  26. log.info("sm2网站兼容模式 C1C3C2", "解密后", gmssl.sm2decrypt(private,encodeStr, true))
  27. else
  28. log.info("解密失败")
  29. end
  30. -- 密文格式 C1C2C3, 老国标, 老的Java库通常支持这种
  31. log.info("==== SM2 网站兼容模式, 但C1C2C3")
  32. local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr, true, true)
  33. log.info("sm2网站兼容模式 C1C2C3", "加密后", encodeStr and string.toHex(encodeStr))
  34. if encodeStr then
  35. log.info("sm2网站兼容模式 C1C2C3", "解密后", gmssl.sm2decrypt(private,encodeStr, true, true))
  36. else
  37. log.info("解密失败")
  38. end
  39. end
  40. local function gmssl_sm2_task_func()
  41. -- 未加密字符串
  42. local originStr = "!!from LuatOS!!"
  43. -- SM2 , 非对称加密, 类似于RSA,但属于椭圆算法
  44. -- 就当前实现还是比较慢的
  45. if gmssl.sm2encrypt then -- 部分BSP不支持
  46. local pkx = "ABE87C924B7ECFDEA1748A06E89003C9F7F4DC5C3563873CE2CAE46F66DE8141"
  47. local pky = "9514733D38CC026F2452A6A3A3A4DA0C28F864AFA5FE2C45E0EB6B761FBB5286"
  48. local private = "129EDC282CD2E9C1144C2E7315F926D772BC96600D2771E8BE02060313FE00D5"
  49. gmssl_sm2_encrypt_decrypt(originStr, pkx, pky, private)
  50. end
  51. -- SM密钥生成
  52. if gmssl.sm2keygen then
  53. log.info("SM2密钥生成测试")
  54. originStr = "32wrniosadnfvnadsio;fasiow"
  55. local pkx, pky, private = gmssl.sm2keygen()
  56. gmssl_sm2_encrypt_decrypt(originStr, pkx, pky, private)
  57. end
  58. end
  59. sys.taskInit(gmssl_sm2_task_func)