testCrypto.lua 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. --- 模块功能:算法功能测试.
  2. -- @author openLuat
  3. -- @module crypto.testCrypto
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.20
  7. module(...,package.seeall)
  8. require"utils"
  9. require "common"
  10. --[[
  11. 加解密算法结果,可对照
  12. http://tool.oschina.net/encrypt?type=2
  13. http://www.ip33.com/crc.html
  14. http://tool.chacuo.net/cryptaes
  15. 进行测试
  16. ]]
  17. local slen = string.len
  18. --- base64加解密算法测试
  19. -- @return 无
  20. -- @usage base64Test()
  21. local function base64Test()
  22. local originStr = "123456crypto.base64_encodemodule(...,package.seeall)sys.timerStart(test,5000)jdklasdjklaskdjklsa"
  23. local encodeStr = crypto.base64_encode(originStr,slen(originStr))
  24. log.info("testCrypto.base64_encode",encodeStr)
  25. log.info("testCrypto.base64_decode",crypto.base64_decode(encodeStr,slen(encodeStr)))
  26. end
  27. --- hmac_md5算法测试
  28. -- @return 无
  29. -- @usage hmacMd5Test()
  30. local function hmacMd5Test()
  31. local originStr = "asdasdsadas"
  32. local signKey = "123456"
  33. log.info("testCrypto.hmac_md5",crypto.hmac_md5(originStr,slen(originStr),signKey,slen(signKey)))
  34. end
  35. --- xxtea算法测试
  36. -- @return 无
  37. -- @usage xxteaTest()
  38. local function xxteaTest()
  39. if crypto.xxtea_encrypt then
  40. local text = "Hello World!";
  41. local key = "07946";
  42. local encrypt_data = crypto.xxtea_encrypt(text, key);
  43. log.info("testCrypto.xxteaTest","xxtea_encrypt:"..encrypt_data)
  44. local decrypt_data = crypto.xxtea_decrypt(encrypt_data, key);
  45. log.info("testCrypto.xxteaTest","decrypt_data:"..decrypt_data)
  46. end
  47. end
  48. --- 流式md5算法测试
  49. -- @return 无
  50. -- @usage flowMd5Test()
  51. local function flowMd5Test()
  52. local fmd5Obj=crypto.flow_md5()
  53. local testTable={"lqlq666lqlq946","07946lq94607946","lq54075407540707946"}
  54. for i=1, #(testTable) do
  55. fmd5Obj:update(testTable[i])
  56. end
  57. log.info("testCrypto.flowMd5Test",fmd5Obj:hexdigest())
  58. end
  59. --- md5算法测试
  60. -- @return 无
  61. -- @usage md5Test()
  62. local function md5Test()
  63. --计算字符串的md5值
  64. local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
  65. log.info("testCrypto.md5",crypto.md5(originStr,slen(originStr)))
  66. -- crypto.md5,第一个参数为文件路径,第二个参数必须是"file"
  67. log.info("testCrypto.sys.lua md5",crypto.md5("/lua/sys.lua","file"))
  68. end
  69. --- 流式sm3算法测试
  70. -- @return 无
  71. -- @usage flowSm3Test()
  72. local function flowSm3Test()
  73. local fSm3Obj=crypto.sm3start()
  74. local testTable={"lqlq666lqlq946","07946lq94607946","lq54075407540707946"}
  75. for i=1, #(testTable) do
  76. fSm3Obj:sm3update(testTable[i])
  77. end
  78. log.info("testCrypto.flowSm3Test",fSm3Obj:sm3finish())
  79. end
  80. --- hmac_sha1算法测试
  81. -- @return 无
  82. -- @usage hmacSha1Test()
  83. local function hmacSha1Test()
  84. local originStr = "asdasdsadasweqcdsjghjvcb"
  85. local signKey = "12345689012345"
  86. log.info("testCrypto.hmac_sha1",crypto.hmac_sha1(originStr,slen(originStr),signKey,slen(signKey)))
  87. end
  88. --- sha1算法测试
  89. -- @return 无
  90. -- @usage sha1Test()
  91. local function sha1Test()
  92. local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
  93. log.info("testCrypto.sha1",crypto.sha1(originStr,slen(originStr)))
  94. end
  95. --- sha256算法测试
  96. -- @return 无
  97. -- @usage sha256Test()
  98. local function sha256Test()
  99. local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
  100. log.info("testCrypto.sha1",crypto.sha256(originStr,slen(originStr)))
  101. end
  102. local function hmacSha256Test()
  103. if type(crypto.hmac_sha256)=="function" then
  104. local originStr = "asdasdsadasweqcdsjghjvcb"
  105. local signKey = "12345689012345"
  106. log.info("testCrypto.hmac_sha256",crypto.hmac_sha256(originStr,signKey))
  107. end
  108. end
  109. --- crc算法测试
  110. -- @return 无
  111. -- @usage crcTest()
  112. local function crcTest()
  113. local originStr = "sdfdsfdsfdsffdsfdsfsdfs1234"
  114. --crypto.crc16()第一个参数是校验方法,必须为以下几个;第二个参数为计算校验的字符串
  115. log.info("testCrypto.crc16_MODBUS",string.format("%04X",crypto.crc16("MODBUS",originStr)))
  116. log.info("testCrypto.crc16_IBM",string.format("%04X",crypto.crc16("IBM",originStr)))
  117. log.info("testCrypto.crc16_X25",string.format("%04X",crypto.crc16("X25",originStr)))
  118. log.info("testCrypto.crc16_MAXIM",string.format("%04X",crypto.crc16("MAXIM",originStr)))
  119. log.info("testCrypto.crc16_USB",string.format("%04X",crypto.crc16("USB",originStr)))
  120. log.info("testCrypto.crc16_CCITT",string.format("%04X",crypto.crc16("CCITT",originStr)))
  121. log.info("testCrypto.crc16_CCITT-FALSE",string.format("%04X",crypto.crc16("CCITT-FALSE",originStr)))
  122. log.info("testCrypto.crc16_XMODEM",string.format("%04X",crypto.crc16("XMODEM",originStr)))
  123. log.info("testCrypto.crc16_DNP",string.format("%04X",crypto.crc16("DNP",originStr)))
  124. log.info("testCrypto.USER-DEFINED",string.format("%04X",crypto.crc16("USER-DEFINED",originStr,0x8005,0x0000,0x0000,0,0)))
  125. -- log.info("testCrypto.crc16_modbus",string.format("%04X",crypto.crc16_modbus(originStr,slen(originStr))))
  126. -- log.info("testCrypto.crc32",string.format("%08X",crypto.crc32(originStr,slen(originStr))))
  127. end
  128. --- aes算法测试(参考http://tool.chacuo.net/cryptaes)
  129. -- @return 无
  130. -- @usage aesTest()
  131. local function aesTest()
  132. local originStr = "AES128 ECB ZeroP test"--长度为16的整数倍
  133. --加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
  134. local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"1234567890123456")
  135. print(originStr,"encrypt",string.toHex(encodeStr))
  136. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
  137. originStr = "AES128 ECB Pkcs5Padding test"
  138. --加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
  139. encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"1234567890123456")
  140. print(originStr,"encrypt",string.toHex(encodeStr))
  141. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
  142. originStr = "AES128 ECB Pkcs7Padding test"
  143. --加密模式:ECB;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit
  144. encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"1234567890123456")
  145. print(originStr,"encrypt",string.toHex(encodeStr))
  146. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"1234567890123456"))
  147. --lyy 21/05/26 添加ECB NonePadding算法测试
  148. originStr = ("AES128 ECB NoneP")--长度为16的整数倍
  149. --加密模式:ECB;填充方式:NONE;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  150. encodeStr = crypto.aes_encrypt("ECB","NONE",originStr,"1234567890123456")
  151. print(originStr,"encrypt",string.toHex(encodeStr))
  152. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","NONE",encodeStr,"1234567890123456"))
  153. --lyy 21/05/26 添加ECB NonePadding算法测试
  154. originStr = "AES192 ECB ZeroPadding test"
  155. --加密模式:ECB;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit
  156. local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"123456789012345678901234")
  157. print(originStr,"encrypt",string.toHex(encodeStr))
  158. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"123456789012345678901234"))
  159. originStr = "AES192 ECB Pkcs5Padding test"
  160. --加密模式:ECB;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit
  161. encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"123456789012345678901234")
  162. print(originStr,"encrypt",string.toHex(encodeStr))
  163. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"123456789012345678901234"))
  164. originStr = "AES192 ECB Pkcs7Padding test"
  165. --加密模式:ECB;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit
  166. encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"123456789012345678901234")
  167. print(originStr,"encrypt",string.toHex(encodeStr))
  168. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"123456789012345678901234"))
  169. originStr = "AES256 ECB ZeroPadding test"
  170. --加密模式:ECB;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit
  171. local encodeStr = crypto.aes_encrypt("ECB","ZERO",originStr,"12345678901234567890123456789012")
  172. print(originStr,"encrypt",string.toHex(encodeStr))
  173. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","ZERO",encodeStr,"12345678901234567890123456789012"))
  174. originStr = "AES256 ECB Pkcs5Padding test"
  175. --加密模式:ECB;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
  176. encodeStr = crypto.aes_encrypt("ECB","PKCS5",originStr,"12345678901234567890123456789012")
  177. print(originStr,"encrypt",string.toHex(encodeStr))
  178. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS5",encodeStr,"12345678901234567890123456789012"))
  179. originStr = "AES256 ECB Pkcs7Padding test"
  180. --加密模式:ECB;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit
  181. encodeStr = crypto.aes_encrypt("ECB","PKCS7",originStr,"12345678901234567890123456789012")
  182. print(originStr,"encrypt",string.toHex(encodeStr))
  183. log.info("testCrypto.decrypt",crypto.aes_decrypt("ECB","PKCS7",encodeStr,"12345678901234567890123456789012"))
  184. originStr = "AES128 CBC ZeroPadding test"
  185. --加密模式:CBC;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  186. local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"1234567890123456","1234567890666666")
  187. print(originStr,"encrypt",string.toHex(encodeStr))
  188. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"1234567890123456","1234567890666666"))
  189. originStr = "AES128 CBC Pkcs5Padding test"
  190. --加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  191. encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
  192. print(originStr,"encrypt",string.toHex(encodeStr))
  193. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
  194. originStr = "AES128 CBC Pkcs7Padding test"
  195. --加密模式:CBC;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  196. encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"1234567890123456","1234567890666666")
  197. print(originStr,"encrypt",string.toHex(encodeStr))
  198. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
  199. --lyy 21/05/26 添加CBC NonePadding算法测试
  200. originStr = ("AES128 CBC NoneP")--长度为16的整数倍
  201. --加密模式:CBC;填充方式:NONE;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  202. encodeStr = crypto.aes_encrypt("CBC","NONE",originStr,"1234567890123456","1234567890666666")
  203. print(originStr,"encrypt",string.toHex(encodeStr))
  204. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","NONE",encodeStr,"1234567890123456","1234567890666666"))
  205. --lyy 21/05/26 添加CBC NonePadding算法测试
  206. originStr = "AES192 CBC ZeroPadding test"
  207. --加密模式:CBC;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
  208. local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"123456789012345678901234","1234567890666666")
  209. print(originStr,"encrypt",string.toHex(encodeStr))
  210. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
  211. originStr = "AES192 CBC Pkcs5Padding test"
  212. --加密模式:CBC;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
  213. encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"123456789012345678901234","1234567890666666")
  214. print(originStr,"encrypt",string.toHex(encodeStr))
  215. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
  216. originStr = "AES192 CBC Pkcs7Padding test"
  217. --加密模式:CBC;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
  218. encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"123456789012345678901234","1234567890666666")
  219. print(originStr,"encrypt",string.toHex(encodeStr))
  220. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
  221. originStr = "AES256 CBC ZeroPadding test"
  222. --加密模式:CBC;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
  223. local encodeStr = crypto.aes_encrypt("CBC","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
  224. print(originStr,"encrypt",string.toHex(encodeStr))
  225. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
  226. originStr = "AES256 CBC Pkcs5Padding test"
  227. --加密模式:CBC;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
  228. encodeStr = crypto.aes_encrypt("CBC","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
  229. print(originStr,"encrypt",string.toHex(encodeStr))
  230. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))
  231. originStr = "AES256 CBC Pkcs7Padding test"
  232. --加密模式:CBC;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
  233. encodeStr = crypto.aes_encrypt("CBC","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
  234. print(originStr,"encrypt",string.toHex(encodeStr))
  235. log.info("testCrypto.decrypt",crypto.aes_decrypt("CBC","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))
  236. originStr = "AES128 CTR ZeroPadding test"
  237. --加密模式:CTR;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  238. local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"1234567890123456","1234567890666666")
  239. print(originStr,"encrypt",string.toHex(encodeStr))
  240. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"1234567890123456","1234567890666666"))
  241. originStr = "AES128 CTR Pkcs5Padding test"
  242. --加密模式:CTR;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  243. encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"1234567890123456","1234567890666666")
  244. print(originStr,"encrypt",string.toHex(encodeStr))
  245. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
  246. originStr = "AES128 CTR Pkcs7Padding test"
  247. --加密模式:CTR;填充方式:Pkcs7Padding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  248. encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"1234567890123456","1234567890666666")
  249. print(originStr,"encrypt",string.toHex(encodeStr))
  250. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"1234567890123456","1234567890666666"))
  251. originStr = "AES128 CTR NoneP"--长度为16的整数倍
  252. --加密模式:CTR;填充方式:NonePadding;密钥:1234567890123456;密钥长度:128 bit;偏移量:1234567890666666
  253. encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"1234567890123456","1234567890666666")
  254. print(originStr,"encrypt",string.toHex(encodeStr))
  255. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"1234567890123456","1234567890666666"))
  256. originStr = "AES192 CTR ZeroPadding test"
  257. --加密模式:CTR;填充方式:ZeroPadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
  258. local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"123456789012345678901234","1234567890666666")
  259. print(originStr,"encrypt",string.toHex(encodeStr))
  260. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"123456789012345678901234","1234567890666666"))
  261. originStr = "AES192 CTR Pkcs5Padding test"
  262. --加密模式:CTR;填充方式:Pkcs5Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
  263. encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"123456789012345678901234","1234567890666666")
  264. print(originStr,"encrypt",string.toHex(encodeStr))
  265. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"123456789012345678901234","1234567890666666"))
  266. originStr = "AES192 CTR Pkcs7Padding test"
  267. --加密模式:CTR;填充方式:Pkcs7Padding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
  268. encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"123456789012345678901234","1234567890666666")
  269. print(originStr,"encrypt",string.toHex(encodeStr))
  270. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"123456789012345678901234","1234567890666666"))
  271. originStr = "AES192 CTR NoneP"--长度为16的整数倍
  272. --加密模式:CTR;填充方式:NonePadding;密钥:123456789012345678901234;密钥长度:192 bit;偏移量:1234567890666666
  273. encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"123456789012345678901234","1234567890666666")
  274. print(originStr,"encrypt",string.toHex(encodeStr))
  275. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"123456789012345678901234","1234567890666666"))
  276. originStr = "AES256 CTR ZeroPadding test"
  277. --加密模式:CTR;填充方式:ZeroPadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
  278. local encodeStr = crypto.aes_encrypt("CTR","ZERO",originStr,"12345678901234567890123456789012","1234567890666666")
  279. print(originStr,"encrypt",string.toHex(encodeStr))
  280. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","ZERO",encodeStr,"12345678901234567890123456789012","1234567890666666"))
  281. originStr = "AES256 CTR Pkcs5Padding test"
  282. --加密模式:CTR;填充方式:Pkcs5Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
  283. encodeStr = crypto.aes_encrypt("CTR","PKCS5",originStr,"12345678901234567890123456789012","1234567890666666")
  284. print(originStr,"encrypt",string.toHex(encodeStr))
  285. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS5",encodeStr,"12345678901234567890123456789012","1234567890666666"))
  286. originStr = "AES256 CTR Pkcs7Padding test"
  287. --加密模式:CTR;填充方式:Pkcs7Padding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
  288. encodeStr = crypto.aes_encrypt("CTR","PKCS7",originStr,"12345678901234567890123456789012","1234567890666666")
  289. print(originStr,"encrypt",string.toHex(encodeStr))
  290. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","PKCS7",encodeStr,"12345678901234567890123456789012","1234567890666666"))
  291. originStr = "AES256 CTR NoneP"--长度为16的整数倍
  292. --加密模式:CTR;填充方式:NonePadding;密钥:12345678901234567890123456789012;密钥长度:256 bit;偏移量:1234567890666666
  293. encodeStr = crypto.aes_encrypt("CTR","NONE",originStr,"12345678901234567890123456789012","1234567890666666")
  294. print(originStr,"encrypt",string.toHex(encodeStr))
  295. log.info("testCrypto.decrypt",crypto.aes_decrypt("CTR","NONE",encodeStr,"12345678901234567890123456789012","1234567890666666"))
  296. end
  297. --rsa算法测试
  298. local function rsaTest()
  299. --local plainStr = "1234567890asdfghjklzxcvbnm"
  300. local plainStr = "firmId=10015&model=zw-sp300&sn=W01201910300000108&version=1.0.0"
  301. --公钥加密(2048bit,这个bit与实际公钥的bit要保持一致)
  302. local encryptStr = crypto.rsa_encrypt("PUBLIC_KEY",io.readFile("/lua/public.key"),2048,"PUBLIC_CRYPT",plainStr)
  303. log.info("rsaTest.encrypt",encryptStr:toHex())
  304. --私钥解密(2048bit,这个bit与实际私钥的bit要保持一致)
  305. local decryptStr = crypto.rsa_decrypt("PRIVATE_KEY",io.readFile("/lua/private.key"),2048,"PRIVATE_CRYPT",encryptStr)
  306. log.info("rsaTest.decrypt",decryptStr) --此处的decryptStr应该与plainStr相同
  307. --私钥签名(2048bit,这个bit与实际私钥的bit要保持一致)
  308. local signStr = crypto.rsa_sha256_sign("PRIVATE_KEY",io.readFile("/lua/private.key"),2048,"PRIVATE_CRYPT",plainStr)
  309. log.info("rsaTest.signStr",signStr:toHex())
  310. --公钥验签(2048bit,这个bit与实际公钥的bit要保持一致)
  311. local verifyResult = crypto.rsa_sha256_verify("PUBLIC_KEY",io.readFile("/lua/public.key"),2048,"PUBLIC_CRYPT",signStr,plainStr)
  312. log.info("rsaTest.verify",verifyResult)
  313. --私钥解密某个客户的公钥加密密文
  314. encryptStr = string.fromHex("af750a8c95f9d973a033686488197cffacb8c1b2b5a15ea8779a48a72a1cdb2f9c948fe5ce0ac231a16de16b5fb609f62ec81c7646c1f018e333860627b5d4853cfe77f71ea7e4573323905faf0a759d59729d2afb80e46ff1f1b715227b599a14f3b9feb676f1feb1c2acd97f4d494124237a720ca781a16a2b600c17e348a5fdd3c374384276147b93ce93cc5a005a0aaf1581cdb7d58bfa84b4e4d7263efc02bf7ad80b15937ce8b37ced4e1ef8899be5c2a7d338cb5c4784c6b8a1cb31e7ecd1ec48597a02050b1190a3e13f2253a35e8cbc094c0af28b968f05a7f946a7a8cf3f9da2013d53ee51ca74279f8f36662e093b37db83caef5b18b666d405d4")
  315. decryptStr = crypto.rsa_decrypt("PRIVATE_KEY",io.readFile("/lua/private.key"),2048,"PRIVATE_CRYPT",encryptStr)
  316. log.info("rsaTest.decrypt",decryptStr)
  317. --公钥验签某个客户的私钥签名密文
  318. signStr = string.fromHex("7251fd625c01ac41e277d11b5b795962ba42d89a645eb9fe2241b2d8a9b6b5b6ea70e23e6933ef1324495749abde0e31eaf4fefe6d09f9270c0510790bd6075595717522539b7b70b798bdc216dae3873389644d73b04ecaeb01b25831904955a891d2459334a3f9f1e4558f7f99906c35f94c377f7f95cf0d3e062d8eb513fd723ad8b3981027b09126fbeb72d5fe4554a32b9c270f8f46032ede59387769b1fb090f0b4be15aaac2744a666dfbde7c04e02979f1c1b4e4c0f23c6bb9f60941312850caf41442d68ad7c9e939b7305ac6712ad31427f1c1d7b4f68001df9ce03367bd35e401a420f526aee3c96c2caaccb9a8db09b30930172b4c2847725d05")
  319. verifyResult = crypto.rsa_sha256_verify("PUBLIC_KEY",io.readFile("/lua/public.key"),2048,"PUBLIC_CRYPT",signStr,"firmId=10015&model=zw-sp300&sn=W01201910300000108&version=1.0.0")
  320. log.info("rsaTest.verifyResult customer",verifyResult)
  321. end
  322. --DES算法测试
  323. local function desTest()
  324. local originStr = "123456781234"
  325. --加密模式:DES CBC;填充方式:ZERO;密钥:12345678; 偏移:00000000
  326. encodeStr = crypto.des_encrypt("CBC","ZERO",originStr,"12345678","00000000")
  327. print(originStr,"DES CBC ZeroPadding encrypt",string.toHex(encodeStr))
  328. log.info("DES ECB ZeroPadding decrypt",crypto.des_decrypt("CBC","ZERO",encodeStr,"12345678","00000000"))
  329. originStr = "123456789"
  330. --加密模式:DES CBC;填充方式:Pkcs5Padding;密钥:12345678; 偏移:00000000
  331. encodeStr = crypto.des_encrypt("CBC","PKCS5",originStr,"12345678","00000000")
  332. print(originStr,"DES CBC Pkcs5Padding encrypt",string.toHex(encodeStr))
  333. log.info("DES ECB Pkcs5Padding decrypt",crypto.des_decrypt("CBC","PKCS5",encodeStr,"12345678","00000000"))
  334. --lyy 21/05/26 添加CBC NonePadding算法测试
  335. originStr = ("DES064 CBC NoneP")--长度为16的整数倍,且密钥长度只支持8位
  336. --加密模式:CBC;填充方式:NONE;密钥:12345678;密钥长度:64 bit;偏移量:00000000
  337. encodeStr = crypto.des_encrypt("CBC","NONE",originStr,"12345678","00000000")
  338. print(originStr,"encrypt",string.toHex(encodeStr))
  339. log.info("testCrypto.decrypt",crypto.des_decrypt("CBC","NONE",encodeStr,"12345678","00000000"))
  340. --lyy 21/05/26 添加CBC NonePadding算法测试
  341. --lyy 21/05/26 添加CBC Pkcs7Padding算法测试
  342. originStr = "123456789"
  343. --加密模式:DES CBC;填充方式:Pkcs7Padding;密钥:12345678; 偏移:00000000
  344. encodeStr = crypto.des_encrypt("CBC","PKCS7",originStr,"12345678","00000000")
  345. print(originStr,"DES CBC Pkcs7Padding encrypt",string.toHex(encodeStr))
  346. log.info("DES CBC Pkcs7Padding decrypt",crypto.des_decrypt("CBC","PKCS7",encodeStr,"12345678","00000000"))
  347. --lyy 21/05/26 添加CBC Pkcs7Padding算法测试
  348. originStr = "123456789"
  349. --加密模式:DES ECB;填充方式:Pkcs7Padding;密钥:12345678
  350. encodeStr = crypto.des_encrypt("ECB","PKCS7",originStr,"12345678","12345678")
  351. print(originStr,"DES ECB Pkcs7Padding encrypt",string.toHex(encodeStr))
  352. log.info("DES ECB Pkcs7Padding decrypt",crypto.des_decrypt("ECB","PKCS7",encodeStr,"12345678"))
  353. originStr = ("31323334353637383900000000000000"):fromHex()
  354. --加密模式:DES ECB;填充方式:NONE;密钥:12345678
  355. encodeStr = crypto.des_encrypt("ECB","NONE",originStr,"12345678")
  356. print(originStr,"DES ECB NonePadding encrypt",string.toHex(encodeStr))
  357. log.info("DES ECB NonePadding decrypt",string.toHex(crypto.des_decrypt("ECB","NONE",encodeStr,"12345678")))
  358. --lyy 21/05/26 添加ECB Pkcs5Padding算法测试
  359. originStr = "123456789"
  360. --加密模式:DES ECB;填充方式:Pkcs5Padding;密钥:12345678
  361. encodeStr = crypto.des_encrypt("ECB","PKCS5",originStr,"12345678","12345678")
  362. print(originStr,"DES ECB Pkcs5Padding encrypt",string.toHex(encodeStr))
  363. log.info("DES ECB Pkcs5Padding decrypt",crypto.des_decrypt("ECB","PKCS5",encodeStr,"12345678"))
  364. --lyy 21/05/26 添加ECB Pkcs5Padding算法测试
  365. --lyy 21/05/26 添加ECB ZeroPadding算法测试
  366. originStr = "123456789"
  367. --加密模式:DES ECB;填充方式:ZERO;密钥:12345678; 偏移:00000000
  368. encodeStr = crypto.des_encrypt("ECB","ZERO",originStr,"12345678")
  369. print(originStr,"DES ECB ZeroPadding encrypt",string.toHex(encodeStr))
  370. log.info("DES ECB ZeroPadding decrypt",crypto.des_decrypt("ECB","ZERO",encodeStr,"12345678"))
  371. --lyy 21/05/26 添加ECB ZeroPadding算法测试
  372. end
  373. --DES3算法测试
  374. local function des3Test()
  375. local originStr = "123456781234"
  376. --加密模式:DES3 CBC;填充方式:ZERO;密钥:123456781234567812345678; 偏移:00000000
  377. encodeStr = crypto.des3_encrypt("CBC","ZERO",originStr,"123456781234567812345678","00000000")
  378. print(originStr,"DES3 CBC ZeroPadding encrypt",string.toHex(encodeStr))
  379. log.info("DES3 CBC ZeroPadding decrypt",crypto.des3_decrypt("CBC","ZERO",encodeStr,"123456781234567812345678","00000000"))
  380. originStr = "123456789"
  381. --加密模式:DES3 CBC;填充方式:Pkcs5Padding;密钥:123456781234567812345678; 偏移:00000000
  382. encodeStr = crypto.des3_encrypt("CBC","PKCS5",originStr,"123456781234567812345678","00000000")
  383. print(originStr,"DES3 CBC Pkcs5Padding encrypt",string.toHex(encodeStr))
  384. log.info("DES3 CBC Pkcs5Padding decrypt",crypto.des3_decrypt("CBC","PKCS5",encodeStr,"123456781234567812345678","00000000"))
  385. --lyy 21/05/26 添加CBC NonePadding算法测试
  386. originStr = ("DES3192 CBC None")--长度为16的整数倍,密钥只支持16或24位
  387. --加密模式:CBC;填充方式:NONE;密钥:123456781234567812345678; 密钥长度:192 bit;偏移量:00000000
  388. encodeStr = crypto.des3_encrypt("CBC","NONE",originStr,"123456781234567812345678","00000000")
  389. print(originStr,"encrypt",string.toHex(encodeStr))
  390. log.info("testCrypto.decrypt",crypto.des3_decrypt("CBC","NONE",encodeStr,"123456781234567812345678","00000000"))
  391. --lyy 21/05/26 添加CBC NonePadding算法测试
  392. --lyy 21/05/26 添加CBC Pkcs7Padding算法测试
  393. originStr = "123456789"
  394. --加密模式:DES3 CBC;填充方式:Pkcs7Padding;密钥:123456781234567812345678; 偏移:00000000
  395. encodeStr = crypto.des3_encrypt("CBC","PKCS7",originStr,"123456781234567812345678","00000000")
  396. print(originStr,"DES3 CBC Pkcs7Padding encrypt",string.toHex(encodeStr))
  397. log.info("DES3 CBC Pkcs7Padding decrypt",crypto.des3_decrypt("CBC","PKCS7",encodeStr,"123456781234567812345678","00000000"))
  398. --lyy 21/05/26 添加CBC Pkcs7Padding算法测试
  399. originStr = "123456789"
  400. --加密模式:DES3 ECB;填充方式:Pkcs7Padding;密钥:123456781234567812345678
  401. encodeStr = crypto.des3_encrypt("ECB","PKCS7",originStr,"123456781234567812345678","123456781234567812345678")
  402. print(originStr,"DES3 ECB Pkcs7Padding encrypt",string.toHex(encodeStr))
  403. log.info("DES3 ECB Pkcs7Padding decrypt",crypto.des3_decrypt("ECB","PKCS7",encodeStr,"123456781234567812345678"))
  404. originStr = ("31323334353637383900000000000000"):fromHex()
  405. --加密模式:DES3 ECB;填充方式:NONE;密钥:123456781234567812345678
  406. encodeStr = crypto.des3_encrypt("ECB","NONE",originStr,"123456781234567812345678")
  407. print(originStr,"DES3 ECB NonePadding encrypt",string.toHex(encodeStr))
  408. log.info("DES3 ECB NonePadding decrypt",string.toHex(crypto.des3_decrypt("ECB","NONE",encodeStr,"123456781234567812345678")))
  409. --lyy 21/05/26 添加ECB Pkcs5Padding算法测试
  410. originStr = "123456789"
  411. --加密模式:DES3 ECB;填充方式:Pkcs5Padding;密钥:123456781234567812345678
  412. encodeStr = crypto.des3_encrypt("ECB","PKCS5",originStr,"123456781234567812345678","123456781234567812345678")
  413. print(originStr,"DES3 ECB Pkcs5Padding encrypt",string.toHex(encodeStr))
  414. log.info("DES3 ECB Pkcs5Padding decrypt",crypto.des3_decrypt("ECB","PKCS5",encodeStr,"123456781234567812345678"))
  415. --lyy 21/05/26 添加ECB Pkcs5Padding算法测试
  416. --lyy 21/05/26 添加ECB ZeroPadding算法测试
  417. originStr = "123456789"
  418. --加密模式:DES3 ECB;填充方式:ZERO;密钥:123456781234567812345678
  419. encodeStr = crypto.des3_encrypt("ECB","ZERO",originStr,"123456781234567812345678")
  420. print(originStr,"DES3 ECB ZeroPadding encrypt",string.toHex(encodeStr))
  421. log.info("DES3 ECB ZeroPadding decrypt",crypto.des3_decrypt("ECB","ZERO",encodeStr,"123456781234567812345678"))
  422. --lyy 21/05/26 添加ECB ZeroPadding算法测试
  423. end
  424. --- 算法测试入口
  425. -- @return
  426. local function cryptoTest()
  427. print("test start")
  428. hmacMd5Test()
  429. md5Test()
  430. hmacSha1Test()
  431. flowMd5Test()
  432. --从LuatOS-Air_V3102版本开始,才支持SM3算法
  433. pcall(flowSm3Test)
  434. base64Test()
  435. crcTest()
  436. aesTest()
  437. sha1Test()
  438. sha256Test()
  439. hmacSha256Test()
  440. xxteaTest()
  441. print(pcall(rsaTest))
  442. desTest()
  443. des3Test()
  444. print("test end")
  445. end
  446. sys.timerStart(cryptoTest,6000)