设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 6959|回复: 11
收起左侧

任意字节集数据与文本型无损互转 文本型代替字节集的方法 带加密压缩与CRC32校验功能

[复制链接]
发表于 2018-5-19 12:03:34 | 显示全部楼层 |阅读模式
此算法与Base64算法类似,但不能完全代替使用,此算法处理一段加密数据后文件长度增加3%左右,可能会低于0%,而Base64则固定增加30%左右。

  1. .版本 2
  2. .支持库 YunReg
  3. .支持库 spec
  4. .支持库 dp1

  5. .程序集 程序集1
  6. .程序集变量 十六进制文本表, 文本型

  7. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

  8. 置随机数种子 ()
  9. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  10. 返回 (0)  ' 可以根据您的需要返回任意数值

  11. .子程序 _临时子程序
  12. .局部变量 编码前, 字节集
  13. .局部变量 解码后, 字节集
  14. .局部变量 文本, 文本型
  15. .局部变量 编码前长度, 整数型
  16. .局部变量 编码后长度, 整数型
  17. .局部变量 base64编码长度, 整数型
  18. .局部变量 密码文本, 文本型
  19. .局部变量 计数, 整数型

  20. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

  21. .计次循环首 (100, 计数)
  22.     密码文本 = “123456” + 到文本 (计数)
  23.     编码前 = 随机字节集 (10000)
  24.     文本 = 任意字节集到文本 (编码前, 密码文本)
  25.     解码后 = 任意文本到字节集 (文本, 密码文本)
  26.     .如果真 (编码前 ≠ 解码后)
  27.         暂停 ()
  28.     .如果真结束
  29.     编码前长度 = 取字节集长度 (编码前)
  30.     编码后长度 = 取文本长度 (文本)
  31.     base64编码长度 = 取文本长度 (BASE64算法编码 (编码前))
  32.     调试输出 (编码前长度, 编码后长度, base64编码长度)
  33.     调试输出 (取百分比 (编码后长度, 编码前长度), 取百分比 (base64编码长度, 编码前长度))
  34. .计次循环尾 ()



  35. .子程序 取百分比, 双精度小数型
  36. .参数 当前值, 整数型
  37. .参数 最大值, 整数型

  38. 返回 (当前值 ÷ 最大值 × 100)


  39. .子程序 文本型数组到字节集, 字节集
  40. .参数 文本型, 文本型, 数组
  41. .局部变量 字节集, 字节集
  42. .局部变量 计数, 整数型

  43. .计次循环首 (取数组成员数 (文本型), 计数)
  44.     字节集 = 字节集 + 到字节集 (文本型 [计数]) + { 0 }
  45. .计次循环尾 ()
  46. 返回 (字节集)

  47. .子程序 字节集到文本型数组
  48. .参数 字节集, 字节集
  49. .参数 文本型数组, 文本型, 参考 数组
  50. .局部变量 字节集数组, 字节集, , "0"
  51. .局部变量 数组成员数, 整数型
  52. .局部变量 数组成员计数, 整数型

  53. 字节集数组 = 分割字节集 (字节集, { 0 }, )
  54. 数组成员数 = 取数组成员数 (字节集数组)
  55. 重定义数组 (文本型数组, 假, 数组成员数)
  56. .计次循环首 (数组成员数, 数组成员计数)
  57.     文本型数组 [数组成员计数] = 到文本 (字节集数组 [数组成员计数])
  58. .计次循环尾 ()


  59. .子程序 随机字节集, 字节集
  60. .参数 长度, 整数型
  61. .局部变量 计数, 整数型
  62. .局部变量 字节集, 字节集

  63. 字节集 = 取空白字节集 (长度)
  64. .计次循环首 (长度, 计数)
  65.     字节集 [计数] = 取随机数 (0, 255)
  66. .计次循环尾 ()
  67. 返回 (字节集)

  68. .子程序 字节到十六进制, 文本型
  69. .参数 字节, 字节型

  70. 返回 (取文本中间 (十六进制文本表, 右移 (字节, 4) + 1, 1) + 取文本中间 (十六进制文本表, 位与 (字节, 15) + 1, 1))

  71. .子程序 十六进制到字节, 字节型
  72. .参数 十六进制文本, 文本型
  73. .局部变量 高字节, 字节型
  74. .局部变量 低字节, 字节型

  75. 高字节 = 一位十六进制到字节 (取文本左边 (十六进制文本, 1))
  76. 低字节 = 一位十六进制到字节 (取文本右边 (十六进制文本, 1))
  77. 返回 (位或 (低字节, 左移 (高字节, 4)))


  78. .子程序 一位十六进制到字节, 字节型
  79. .参数 十六进制文本, 文本型
  80. .局部变量 文本, 文本型
  81. .局部变量 计数, 整数型

  82. .变量循环首 (0, 15, 1, 计数)
  83.     .如果真 (十六进制文本 = 取文本中间 (十六进制文本表, 计数 + 1, 1))
  84.         返回 (计数)
  85.     .如果真结束

  86. .变量循环尾 ()
  87. 暂停 ()
  88. 结束 ()

  89. 返回 (255)

  90. .子程序 整数到十六进制, 文本型
  91. .参数 整数, 整数型
  92. .局部变量 字节集, 字节集
  93. .局部变量 计数, 整数型
  94. .局部变量 返回值, 文本型

  95. 字节集 = 到字节集 (整数)
  96. .变量循环首 (4, 1, -1, 计数)
  97.     返回值 = 返回值 + 字节到十六进制 (字节集 [计数])
  98. .变量循环尾 ()
  99. 返回 (返回值)

  100. .子程序 十六进制到整数, 整数型
  101. .参数 十六进制文本, 文本型
  102. .局部变量 计数, 整数型
  103. .局部变量 计数2, 整数型
  104. .局部变量 字节集, 字节集

  105. 字节集 = 取空白字节集 (4)
  106. 计数2 = 5
  107. .变量循环首 (1, 7, 2, 计数)
  108.     计数2 = 计数2 - 1
  109.     字节集 [计数2] = 十六进制到字节 (取文本中间 (十六进制文本, 计数, 2))
  110. .变量循环尾 ()
  111. 返回 (取字节集数据 (字节集, 3, ))


  112. .子程序 任意字节集到文本, 文本型, 公开
  113. .参数 字节集, 字节集
  114. .参数 密码文本, 文本型, 可空
  115. .局部变量 文本型数组, 文本型, , "0"
  116. .局部变量 返回值, 文本型
  117. .局部变量 成员数, 整数型
  118. .局部变量 计数, 整数型
  119. .局部变量 加密压缩后, 字节集

  120. 加密压缩后 = 加密压缩 (字节集, 密码文本)
  121. 返回值 = 随机十六进制文本表 ()
  122. 返回值 = 返回值 + 整数到十六进制 (取字节集长度 (加密压缩后))
  123. 返回值 = 返回值 + 整数到十六进制 (crc32 (加密压缩后))
  124. 字节集到文本型数组 (加密压缩后, 文本型数组)
  125. 成员数 = 取数组成员数 (文本型数组)
  126. .计次循环首 (成员数, 计数)
  127.     返回值 = 返回值 + 整数到十六进制 (取文本长度 (文本型数组 [计数])) + 文本型数组 [计数]
  128. .计次循环尾 ()
  129. 返回 (返回值)


  130. .子程序 任意文本到字节集, 字节集, 公开
  131. .参数 文本, 文本型
  132. .参数 密码文本, 文本型, 可空
  133. .局部变量 长度, 整数型
  134. .局部变量 计数, 整数型
  135. .局部变量 总长, 整数型
  136. .局部变量 返回值, 字节集
  137. .局部变量 字节集长度, 整数型
  138. .局部变量 字节集CRC, 整数型


  139. 总长 = 取文本长度 (文本)
  140. 计数 = 1
  141. 十六进制文本表 = 取文本中间 (文本, 计数, 16)
  142. .如果真 (十六进制文本表是否无效 (到字节集 (十六进制文本表)))
  143.     返回 ({  })
  144. .如果真结束
  145. 计数 = 计数 + 16
  146. 字节集长度 = 十六进制到整数 (取文本中间 (文本, 计数, 8))
  147. 计数 = 计数 + 8
  148. 字节集CRC = 十六进制到整数 (取文本中间 (文本, 计数, 8))
  149. 计数 = 计数 + 8
  150. .循环判断首 ()
  151.     长度 = 十六进制到整数 (取文本中间 (文本, 计数, 8))
  152.     计数 = 计数 + 8
  153.     返回值 = 返回值 + 到字节集 (取文本中间 (文本, 计数, 长度)) + { 0 }
  154.     计数 = 计数 + 长度
  155. .循环判断尾 (计数 < 总长)
  156. 返回值 = 取字节集左边 (返回值, 字节集长度)
  157. .如果真 (字节集CRC ≠ crc32 (返回值))
  158.     返回 ({  })
  159. .如果真结束
  160. 返回 (解密解压 (返回值, 密码文本))


  161. .子程序 随机十六进制文本表, 文本型
  162. .局部变量 字节集, 字节集
  163. .局部变量 计数, 整数型

  164. 字节集 = 取空白字节集 (16)
  165. .循环判断首 ()
  166.     .计次循环首 (16, 计数)
  167.         字节集 [计数] = 取随机数 (1, 255)
  168.     .计次循环尾 ()
  169. .循环判断尾 (十六进制文本表是否无效 (字节集))
  170. 十六进制文本表 = 到文本 (字节集)
  171. 返回 (十六进制文本表)

  172. .子程序 十六进制文本表是否无效, 逻辑型
  173. .参数 字节集, 字节集
  174. .局部变量 出现的值, 逻辑型, , "0"
  175. .局部变量 计数, 整数型

  176. 重定义数组 (出现的值, 假, 256)
  177. .计次循环首 (取字节集长度 (字节集), 计数)
  178.     .如果真 (出现的值 [字节集 [计数] + 1] = 真 或 字节集 [计数] = 0)
  179.         返回 (真)
  180.     .如果真结束
  181.     出现的值 [字节集 [计数] + 1] = 真
  182. .计次循环尾 ()
  183. 返回 (假)


  184. .子程序 crc32, 整数型
  185. .参数 data, 字节集
  186. .局部变量 crcval, 整数型
  187. .局部变量 len, 整数型
  188. .局部变量 i, 整数型
  189. .局部变量 j, 整数型
  190. .局部变量 table, 整数型, , "256"
  191. .局部变量 crc, 整数型

  192. len = 取字节集长度 (data)
  193. crcval = 4294967295
  194. .变量循环首 (0, 255, 1, i)
  195.     crc = i
  196.     .变量循环首 (0, 7, 1, )
  197.         .如果 (位与 (crc, 1) ≠ 0)
  198.             crc = 位异或 (位与 (右移 (crc, 1), 2147483647), 3988292384)
  199.         .否则
  200.             crc = 位与 (右移 (crc, 1), 2147483647)

  201.         .如果结束

  202.     .变量循环尾 ()
  203.     table [i + 1] = crc
  204. .变量循环尾 ()
  205. .计次循环首 (len, i)
  206.     j = 位异或 (data [i], 位与 (crcval, 255)) + 1
  207.     crcval = 位异或 (位与 (右移 (crcval, 8), 16777215), table [j])
  208. .计次循环尾 ()
  209. 返回 (位取反 (crcval))


  210. .子程序 加密压缩, 字节集
  211. .参数 字节集, 字节集
  212. .参数 密码文本, 文本型, 可空

  213. 返回 (加密数据 (压缩数据 (字节集), 密码文本, 1))



  214. .子程序 解密解压, 字节集
  215. .参数 字节集, 字节集
  216. .参数 密码文本, 文本型, 可空

  217. 返回 (解压数据 (解密数据 (字节集, 密码文本, 1)))


复制代码

评分

1

查看全部评分

相关帖子

发表于 2018-5-19 15:20:35 | 显示全部楼层
看看是如何实现无损转换的
发表于 2018-6-2 20:13:28 | 显示全部楼层
不可能的玩意被你可能了
发表于 2018-6-14 16:28:29 | 显示全部楼层
低于0%是什么鬼
发表于 2018-5-19 12:27:14 | 显示全部楼层
这怎么可能
发表于 2018-5-19 19:04:55 | 显示全部楼层
不知道啥玩意了
发表于 2018-5-20 10:24:52 | 显示全部楼层
路过回复看看
发表于 2018-5-20 12:48:33 | 显示全部楼层
我也同楼上
发表于 2018-5-21 20:40:13 | 显示全部楼层
没见过这神发明
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-20 02:24 , Processed in 0.616035 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表