sm2test.lua 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. function sm2test(originStr, pkx, pky, private)
  2. -- GMSSL默认格式
  3. log.info("==== SM2 默认GMSSL模式")
  4. local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr)
  5. log.info("sm2默认模式", "加密后", encodeStr and string.toHex(encodeStr))
  6. if encodeStr then
  7. log.info("sm2默认模式", "解密后", gmssl.sm2decrypt(private,encodeStr))
  8. end
  9. -- 网站兼容模式 https://i.goto327.top/CryptTools/SM2.aspx
  10. -- 密文格式 C1C3C2, 新国标, 一般是这种
  11. log.info("==== SM2 网站兼容模式")
  12. local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr, true)
  13. log.info("sm2网站兼容模式 C1C3C2", "加密后", encodeStr and string.toHex(encodeStr))
  14. if encodeStr then
  15. log.info("sm2网站兼容模式 C1C3C2", "解密后", gmssl.sm2decrypt(private,encodeStr, true))
  16. else
  17. log.info("解密失败")
  18. end
  19. -- 密文格式 C1C2C3, 老国标, 老的Java库通常支持这种
  20. log.info("==== SM2 网站兼容模式, 但C1C2C3")
  21. local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr, true, true)
  22. log.info("sm2网站兼容模式 C1C2C3", "加密后", encodeStr and string.toHex(encodeStr))
  23. if encodeStr then
  24. log.info("sm2网站兼容模式 C1C2C3", "解密后", gmssl.sm2decrypt(private,encodeStr, true, true))
  25. else
  26. log.info("解密失败")
  27. end
  28. end
  29. sys.taskInit(function()
  30. -- 未加密字符串
  31. local originStr = "!!from LuatOS!!"
  32. -- SM2 , 非对称加密, 类似于RSA,但属于椭圆算法
  33. -- 就当前实现还是比较慢的
  34. if gmssl.sm2encrypt then -- 部分BSP不支持
  35. local pkx = "ABE87C924B7ECFDEA1748A06E89003C9F7F4DC5C3563873CE2CAE46F66DE8141"
  36. local pky = "9514733D38CC026F2452A6A3A3A4DA0C28F864AFA5FE2C45E0EB6B761FBB5286"
  37. local private = "129EDC282CD2E9C1144C2E7315F926D772BC96600D2771E8BE02060313FE00D5"
  38. sm2test(originStr, pkx, pky, private)
  39. end
  40. -- SM密钥生成
  41. if gmssl.sm2keygen then
  42. log.info("SM2密钥生成测试")
  43. originStr = "32wrniosadnfvnadsio;fasiow"
  44. local pkx, pky, private = gmssl.sm2keygen()
  45. sm2test(originStr, pkx, pky, private)
  46. end
  47. end)