re-common 2.0.1__py3-none-any.whl → 10.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. re_common/baselibrary/__init__.py +4 -0
  2. re_common/baselibrary/baseabs/__init__.py +7 -0
  3. re_common/baselibrary/baseabs/baseabs.py +26 -0
  4. re_common/baselibrary/database/__init__.py +0 -0
  5. re_common/baselibrary/database/mbuilder.py +132 -0
  6. re_common/baselibrary/database/moudle.py +93 -0
  7. re_common/baselibrary/database/msqlite3.py +194 -0
  8. re_common/baselibrary/database/mysql.py +169 -0
  9. re_common/baselibrary/database/sql_factory.py +26 -0
  10. re_common/baselibrary/mthread/MThreadingRun.py +486 -0
  11. re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -0
  12. re_common/baselibrary/mthread/__init__.py +3 -0
  13. re_common/baselibrary/mthread/mythreading.py +695 -0
  14. re_common/baselibrary/pakge_other/__init__.py +0 -0
  15. re_common/baselibrary/pakge_other/socks.py +404 -0
  16. re_common/baselibrary/readconfig/__init__.py +0 -0
  17. re_common/baselibrary/readconfig/config_factory.py +18 -0
  18. re_common/baselibrary/readconfig/ini_config.py +317 -0
  19. re_common/baselibrary/readconfig/toml_config.py +49 -0
  20. re_common/baselibrary/temporary/__init__.py +0 -0
  21. re_common/baselibrary/temporary/envdata.py +36 -0
  22. re_common/baselibrary/tools/__init__.py +0 -0
  23. re_common/baselibrary/tools/all_requests/__init__.py +0 -0
  24. re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -0
  25. re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -0
  26. re_common/baselibrary/tools/all_requests/mrequest.py +412 -0
  27. re_common/baselibrary/tools/all_requests/requests_request.py +81 -0
  28. re_common/baselibrary/tools/batch_compre/__init__.py +0 -0
  29. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -0
  30. re_common/baselibrary/tools/contrast_db3.py +123 -0
  31. re_common/baselibrary/tools/copy_file.py +39 -0
  32. re_common/baselibrary/tools/db3_2_sizedb3.py +102 -0
  33. re_common/baselibrary/tools/foreachgz.py +40 -0
  34. re_common/baselibrary/tools/get_attr.py +11 -0
  35. re_common/baselibrary/tools/image_to_pdf.py +62 -0
  36. re_common/baselibrary/tools/java_code_deal.py +139 -0
  37. re_common/baselibrary/tools/javacode.py +79 -0
  38. re_common/baselibrary/tools/mdb_db3.py +48 -0
  39. re_common/baselibrary/tools/merge_file.py +171 -0
  40. re_common/baselibrary/tools/merge_gz_file.py +165 -0
  41. re_common/baselibrary/tools/mhdfstools/__init__.py +0 -0
  42. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -0
  43. re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -0
  44. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -0
  45. re_common/baselibrary/tools/mongo_tools.py +50 -0
  46. re_common/baselibrary/tools/move_file.py +170 -0
  47. re_common/baselibrary/tools/move_mongo/__init__.py +0 -0
  48. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -0
  49. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -0
  50. re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -0
  51. re_common/baselibrary/tools/move_mongo/use_mv.py +93 -0
  52. re_common/baselibrary/tools/mpandas/__init__.py +0 -0
  53. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -0
  54. re_common/baselibrary/tools/mpandas/pandas_visualization.py +8 -0
  55. re_common/baselibrary/tools/myparsel.py +104 -0
  56. re_common/baselibrary/tools/rename_dir_file.py +37 -0
  57. re_common/baselibrary/tools/sequoiadb_utils.py +398 -0
  58. re_common/baselibrary/tools/split_line_to_many.py +25 -0
  59. re_common/baselibrary/tools/stringtodicts.py +33 -0
  60. re_common/baselibrary/tools/workwechant_bot.py +84 -0
  61. re_common/baselibrary/utils/__init__.py +0 -0
  62. re_common/baselibrary/utils/baseaiohttp.py +296 -0
  63. re_common/baselibrary/utils/baseaiomysql.py +87 -0
  64. re_common/baselibrary/utils/baseallstep.py +191 -0
  65. re_common/baselibrary/utils/baseavro.py +19 -0
  66. re_common/baselibrary/utils/baseboto3.py +291 -0
  67. re_common/baselibrary/utils/basecsv.py +32 -0
  68. re_common/baselibrary/utils/basedict.py +133 -0
  69. re_common/baselibrary/utils/basedir.py +241 -0
  70. re_common/baselibrary/utils/baseencode.py +351 -0
  71. re_common/baselibrary/utils/baseencoding.py +29 -0
  72. re_common/baselibrary/utils/baseesdsl.py +86 -0
  73. re_common/baselibrary/utils/baseexcel.py +264 -0
  74. re_common/baselibrary/utils/baseexcept.py +109 -0
  75. re_common/baselibrary/utils/basefile.py +654 -0
  76. re_common/baselibrary/utils/baseftp.py +214 -0
  77. re_common/baselibrary/utils/basegzip.py +60 -0
  78. re_common/baselibrary/utils/basehdfs.py +135 -0
  79. re_common/baselibrary/utils/basehttpx.py +268 -0
  80. re_common/baselibrary/utils/baseip.py +87 -0
  81. re_common/baselibrary/utils/basejson.py +2 -0
  82. re_common/baselibrary/utils/baselist.py +32 -0
  83. re_common/baselibrary/utils/basemotor.py +190 -0
  84. re_common/baselibrary/utils/basemssql.py +98 -0
  85. re_common/baselibrary/utils/baseodbc.py +113 -0
  86. re_common/baselibrary/utils/basepandas.py +302 -0
  87. re_common/baselibrary/utils/basepeewee.py +11 -0
  88. re_common/baselibrary/utils/basepika.py +180 -0
  89. re_common/baselibrary/utils/basepydash.py +143 -0
  90. re_common/baselibrary/utils/basepymongo.py +230 -0
  91. re_common/baselibrary/utils/basequeue.py +22 -0
  92. re_common/baselibrary/utils/baserar.py +57 -0
  93. re_common/baselibrary/utils/baserequest.py +279 -0
  94. re_common/baselibrary/utils/baseset.py +8 -0
  95. re_common/baselibrary/utils/basesmb.py +403 -0
  96. re_common/baselibrary/utils/basestring.py +382 -0
  97. re_common/baselibrary/utils/basetime.py +320 -0
  98. re_common/baselibrary/utils/basetuple.py +0 -0
  99. re_common/baselibrary/utils/baseurl.py +121 -0
  100. re_common/baselibrary/utils/basezip.py +57 -0
  101. re_common/baselibrary/utils/core/__init__.py +8 -0
  102. re_common/baselibrary/utils/core/bottomutils.py +18 -0
  103. re_common/baselibrary/utils/core/mdeprecated.py +327 -0
  104. re_common/baselibrary/utils/core/mlamada.py +16 -0
  105. re_common/baselibrary/utils/core/msginfo.py +25 -0
  106. re_common/baselibrary/utils/core/requests_core.py +103 -0
  107. re_common/baselibrary/utils/fateadm.py +429 -0
  108. re_common/baselibrary/utils/importfun.py +123 -0
  109. re_common/baselibrary/utils/mfaker.py +57 -0
  110. re_common/baselibrary/utils/my_abc/__init__.py +3 -0
  111. re_common/baselibrary/utils/my_abc/better_abc.py +32 -0
  112. re_common/baselibrary/utils/mylogger.py +414 -0
  113. re_common/baselibrary/utils/myredisclient.py +861 -0
  114. re_common/baselibrary/utils/pipupgrade.py +21 -0
  115. re_common/baselibrary/utils/ringlist.py +85 -0
  116. re_common/baselibrary/utils/version_compare.py +36 -0
  117. re_common/baselibrary/utils/ydmhttp.py +126 -0
  118. re_common/facade/__init__.py +1 -0
  119. re_common/facade/lazy_import.py +11 -0
  120. re_common/facade/loggerfacade.py +25 -0
  121. re_common/facade/mysqlfacade.py +467 -0
  122. re_common/facade/now.py +31 -0
  123. re_common/facade/sqlite3facade.py +257 -0
  124. re_common/facade/use/__init__.py +0 -0
  125. re_common/facade/use/mq_use_facade.py +83 -0
  126. re_common/facade/use/proxy_use_facade.py +20 -0
  127. re_common/libtest/__init__.py +0 -0
  128. re_common/libtest/base_dict_test.py +19 -0
  129. re_common/libtest/baseavro_test.py +13 -0
  130. re_common/libtest/basefile_test.py +14 -0
  131. re_common/libtest/basemssql_test.py +77 -0
  132. re_common/libtest/baseodbc_test.py +8 -0
  133. re_common/libtest/basepandas_test.py +38 -0
  134. re_common/libtest/get_attr_test/__init__.py +0 -0
  135. re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -0
  136. re_common/libtest/get_attr_test/settings.py +55 -0
  137. re_common/libtest/idencode_test.py +54 -0
  138. re_common/libtest/iniconfig_test.py +35 -0
  139. re_common/libtest/ip_test.py +35 -0
  140. re_common/libtest/merge_file_test.py +20 -0
  141. re_common/libtest/mfaker_test.py +9 -0
  142. re_common/libtest/mm3_test.py +32 -0
  143. re_common/libtest/mylogger_test.py +89 -0
  144. re_common/libtest/myparsel_test.py +28 -0
  145. re_common/libtest/mysql_test.py +151 -0
  146. re_common/libtest/pymongo_test.py +21 -0
  147. re_common/libtest/split_test.py +12 -0
  148. re_common/libtest/sqlite3_merge_test.py +6 -0
  149. re_common/libtest/sqlite3_test.py +34 -0
  150. re_common/libtest/tomlconfig_test.py +30 -0
  151. re_common/libtest/use_tools_test/__init__.py +3 -0
  152. re_common/libtest/user/__init__.py +5 -0
  153. re_common/studio/__init__.py +5 -0
  154. re_common/studio/assignment_expressions.py +37 -0
  155. re_common/studio/mydash/__init__.py +0 -0
  156. re_common/studio/mydash/test1.py +19 -0
  157. re_common/studio/pydashstudio/__init__.py +0 -0
  158. re_common/studio/pydashstudio/first.py +9 -0
  159. re_common/studio/streamlitstudio/__init__.py +0 -0
  160. re_common/studio/streamlitstudio/first_app.py +66 -0
  161. re_common/studio/streamlitstudio/uber_pickups.py +24 -0
  162. re_common/studio/test.py +19 -0
  163. re_common/vip/__init__.py +0 -0
  164. re_common/vip/base_step_process.py +11 -0
  165. re_common/vip/baseencodeid.py +91 -0
  166. re_common/vip/changetaskname.py +28 -0
  167. re_common/vip/core_var.py +24 -0
  168. re_common/vip/mmh3Hash.py +90 -0
  169. re_common/vip/proxy/__init__.py +0 -0
  170. re_common/vip/proxy/allproxys.py +127 -0
  171. re_common/vip/proxy/allproxys_thread.py +159 -0
  172. re_common/vip/proxy/cnki_proxy.py +153 -0
  173. re_common/vip/proxy/kuaidaili.py +87 -0
  174. re_common/vip/proxy/proxy_all.py +113 -0
  175. re_common/vip/proxy/update_kuaidaili_0.py +42 -0
  176. re_common/vip/proxy/wanfang_proxy.py +152 -0
  177. re_common/vip/proxy/wp_proxy_all.py +182 -0
  178. re_common/vip/read_rawid_to_txt.py +92 -0
  179. re_common/vip/title/__init__.py +5 -0
  180. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -0
  181. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -0
  182. re_common/vip/title/transform/TransformCstadTitleToZt.py +196 -0
  183. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -0
  184. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -0
  185. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -0
  186. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -0
  187. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -0
  188. re_common/vip/title/transform/__init__.py +11 -0
  189. {re_common-2.0.1.dist-info → re_common-10.0.0.dist-info}/METADATA +1 -1
  190. re_common-10.0.0.dist-info/RECORD +213 -0
  191. re_common-2.0.1.dist-info/RECORD +0 -25
  192. {re_common-2.0.1.dist-info → re_common-10.0.0.dist-info}/LICENSE +0 -0
  193. {re_common-2.0.1.dist-info → re_common-10.0.0.dist-info}/WHEEL +0 -0
  194. {re_common-2.0.1.dist-info → re_common-10.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,351 @@
1
+ import base64
2
+ import binascii
3
+
4
+ from Crypto.Util.Padding import pad
5
+ from Crypto.Cipher import AES
6
+
7
+
8
+ class BaseEncode(object):
9
+
10
+ def __init__(self):
11
+ pass
12
+
13
+ @classmethod
14
+ def get_byte_md5_value(cls, bytes):
15
+ """
16
+ 获得byte md5值
17
+ :param bytes:需要操作的二进制
18
+ :return:
19
+ """
20
+ import hashlib
21
+ myMd5 = hashlib.md5(bytes)
22
+ myMd5_Digest = myMd5.hexdigest()
23
+ return myMd5_Digest
24
+
25
+ @classmethod
26
+ def get_md5_value(cls, src):
27
+ """
28
+ 获得字符串md5值
29
+ :param src:需要操作的字符串
30
+ :return:
31
+ """
32
+ import hashlib
33
+ myMd5 = hashlib.md5()
34
+ myMd5.update(src.encode("utf8"))
35
+ myMd5_Digest = myMd5.hexdigest()
36
+ return myMd5_Digest
37
+
38
+ @classmethod
39
+ def get_md5_value_16bit(cls, src):
40
+ """
41
+ 获取16位md5
42
+ :param src:
43
+ :return:
44
+ """
45
+ return cls.get_md5_value(src)[8:-8]
46
+
47
+ @classmethod
48
+ def get_byte_md5_value_16bit(cls, bytes):
49
+ """
50
+ 获取16位md5
51
+ :param bytes:
52
+ :return:
53
+ """
54
+ return cls.get_byte_md5_value(bytes)[8:-8]
55
+
56
+ @classmethod
57
+ def get_sha1_value(cls, src):
58
+ """
59
+ 获得字符串sha1值
60
+ :param src:
61
+ :return:
62
+ """
63
+ import hashlib
64
+ mySha1 = hashlib.sha1()
65
+ mySha1.update(src)
66
+ mySha1_Digest = mySha1.hexdigest()
67
+ return mySha1_Digest
68
+
69
+ @classmethod
70
+ def get_base64(cls, src):
71
+ """
72
+ 输入字符串,编码成base64
73
+ :param src:
74
+ :return:
75
+ """
76
+ strEncode = base64.b64encode(src.encode('utf8')).decode('utf8')
77
+ return strEncode
78
+
79
+ @classmethod
80
+ def base64_get_str(cls, base64_str):
81
+ """
82
+ 输入base64字符串,输出原始字符串
83
+ :param base64_str:
84
+ :return:
85
+ """
86
+ src = base64.b64decode(base64_str.encode('utf8')).decode('utf8')
87
+ return src
88
+
89
+ @classmethod
90
+ def aes_encode(cls, password, text, mode, iv=None):
91
+ """
92
+ https://blog.csdn.net/qq_42334096/article/details/122847876
93
+ 在AES标准规范中,分组长度只能是128位 每个分组为16个字节(每个字节8位)。
94
+ 密钥长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。
95
+ AES 密钥长度(32位比特字) 分组长度(32位比特字) 加密轮数
96
+ AES-128 4 4 10
97
+ AES-192 6 4 11
98
+ AES-256 8 4 14
99
+ 填充模式:这是因为如果明文不是128位(16字节)的则需要进行填充,需要将明文补充到16个字节整数倍的长度。在我们进行加解密时需要采用同样的填充方式,
100
+ 否则无法解密成功。填充模式有:No Padding、PKCS5 Padding、PKCS7 Padding、ISO10126 Padding、Ansix923 Padding、Zero Padding等等。
101
+ pip install pycryptodome
102
+ (亲测,目前不用改文件夹名字了) 但是,在使用的时候导包是有问题的,这个时候只要修改一个文件夹的名称就可以完美解决这个问题
103
+ C:\用户\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages
104
+
105
+ 找到这个路径,下面有一个文件夹叫做crypto,将c改成C,对就是改成大写就ok了!
106
+ liunx: pip install pycrypto
107
+ :param password:
108
+ :param text:
109
+ :param mode:
110
+ :return:
111
+ """
112
+ if mode == AES.MODE_ECB:
113
+ assert len(password) % 16 == 0, Exception("密匙 位数应该为16的倍数")
114
+ assert len(text) % 16 == 0, Exception("加密文本 位数应该为16的倍数")
115
+ # MODE_ECB 秘钥必须为16字节或者16字节的倍数的字节型数据。
116
+ # MODE_ECB 明文必须为16字节或者16字节的倍数的字节型数据,如果不够16字节需要进行补全,关于补全规则,后面会在补全模式中具体介绍。
117
+ aes = AES.new(password, AES.MODE_ECB) # 创建一个aes对象
118
+ # AES.MODE_ECB 表示模式是ECB模式
119
+ en_text = aes.encrypt(text) # 加密明文
120
+ return en_text
121
+ if mode == AES.MODE_CBC:
122
+ # 1. 在Python中进行AES加密解密时,所传入的密文、明文、秘钥、iv偏移量、都需要是bytes(字节型)数据。python 在构建aes对象时也只能接受bytes类型数据。
123
+ # 2.当秘钥,iv偏移量,待加密的明文,字节长度不够16字节或者16字节倍数的时候需要进行补全。
124
+ # 3. CBC模式需要重新生成AES对象,为了防止这类错误,我写代码无论是什么模式都重新生成AES对象。
125
+ assert iv is not None
126
+ aes = AES.new(password, AES.MODE_CBC, iv) # 创建一个aes对象
127
+ # AES.MODE_CBC 表示模式是CBC模式
128
+ en_text = aes.encrypt(text)
129
+ return en_text
130
+
131
+ @classmethod
132
+ def aes_decode(cls, password, en_text, mode, iv=None):
133
+ """
134
+ :return:
135
+ """
136
+ if mode == AES.MODE_ECB:
137
+ assert len(password) % 16 == 0, Exception("密匙 位数应该为16的倍数")
138
+ assert len(en_text) % 16 == 0, Exception("密文 位数应该为16的倍数")
139
+ aes = AES.new(password, AES.MODE_ECB) # 创建一个aes对象
140
+ # AES.MODE_ECB 表示模式是ECB模式
141
+ text = aes.decrypt(en_text) # 加密明文
142
+ return text
143
+ if mode == AES.MODE_CBC:
144
+ assert iv is not None
145
+ aes = AES.new(password, AES.MODE_CBC, iv) # 创建一个aes对象
146
+ # AES.MODE_CBC 表示模式是CBC模式
147
+ text = aes.decrypt(en_text)
148
+ return text
149
+
150
+
151
+ # 数据类
152
+ class MData():
153
+ def __init__(self, data=b"", characterSet='utf-8'):
154
+ # data肯定为bytes
155
+ self.data = data
156
+ self.characterSet = characterSet
157
+
158
+ def saveData(self, FileName):
159
+ with open(FileName, 'wb') as f:
160
+ f.write(self.data)
161
+
162
+ def fromString(self, data):
163
+ self.data = data.encode(self.characterSet)
164
+ return self.data
165
+
166
+ def fromBase64(self, data):
167
+ self.data = base64.b64decode(data.encode(self.characterSet))
168
+ return self.data
169
+
170
+ def fromHexStr(self, data):
171
+ self.data = binascii.a2b_hex(data)
172
+ return self.data
173
+
174
+ def toString(self):
175
+ return self.data.decode(self.characterSet)
176
+
177
+ def toBase64(self):
178
+ return base64.b64encode(self.data).decode()
179
+
180
+ def toHexStr(self):
181
+ return binascii.b2a_hex(self.data).decode()
182
+
183
+ def toBytes(self):
184
+ return self.data
185
+
186
+ def __str__(self):
187
+ try:
188
+ return self.toString()
189
+ except Exception:
190
+ return self.toBase64()
191
+
192
+
193
+ ### 封装类
194
+ class AEScryptor():
195
+ def __init__(self, key, mode, iv='', paddingMode="NoPadding", characterSet="utf-8"):
196
+ '''
197
+ 构建一个AES对象
198
+ key: 秘钥,字节型数据
199
+ mode: 使用模式,只提供两种,AES.MODE_CBC, AES.MODE_ECB
200
+ iv: iv偏移量,字节型数据
201
+ paddingMode: 填充模式,默认为NoPadding, 可选NoPadding,ZeroPadding,PKCS5Padding,PKCS7Padding
202
+ characterSet: 字符集编码
203
+ '''
204
+ self.key = key
205
+ self.mode = mode
206
+ self.iv = iv
207
+ self.characterSet = characterSet
208
+ self.paddingMode = paddingMode
209
+ self.data = ""
210
+
211
+ def __ZeroPadding(self, data):
212
+ data += b'\x00'
213
+ while len(data) % 16 != 0:
214
+ data += b'\x00'
215
+ return data
216
+
217
+ def __StripZeroPadding(self, data):
218
+ data = data[:-1]
219
+ while len(data) % 16 != 0:
220
+ data = data.rstrip(b'\x00')
221
+ if data[-1] != b"\x00":
222
+ break
223
+ return data
224
+
225
+ def __PKCS5_7Padding(self, data):
226
+ needSize = 16 - len(data) % 16
227
+ if needSize == 0:
228
+ needSize = 16
229
+ return data + needSize.to_bytes(1, 'little') * needSize
230
+
231
+ def __StripPKCS5_7Padding(self, data):
232
+ paddingSize = data[-1]
233
+ return data.rstrip(paddingSize.to_bytes(1, 'little'))
234
+
235
+ def __paddingData(self, data):
236
+ if self.paddingMode == "NoPadding":
237
+ if len(data) % 16 == 0:
238
+ return data
239
+ else:
240
+ return self.__ZeroPadding(data)
241
+ elif self.paddingMode == "ZeroPadding":
242
+ return self.__ZeroPadding(data)
243
+ elif self.paddingMode == "PKCS5Padding" or self.paddingMode == "PKCS7Padding":
244
+ return self.__PKCS5_7Padding(data)
245
+ else:
246
+ print("不支持Padding")
247
+
248
+ def __stripPaddingData(self, data):
249
+ if self.paddingMode == "NoPadding":
250
+ return self.__StripZeroPadding(data)
251
+ elif self.paddingMode == "ZeroPadding":
252
+ return self.__StripZeroPadding(data)
253
+
254
+ elif self.paddingMode == "PKCS5Padding" or self.paddingMode == "PKCS7Padding":
255
+ return self.__StripPKCS5_7Padding(data)
256
+ else:
257
+ print("不支持Padding")
258
+
259
+ def setCharacterSet(self, characterSet):
260
+ '''
261
+ 设置字符集编码
262
+ characterSet: 字符集编码
263
+ '''
264
+ self.characterSet = characterSet
265
+
266
+ def setPaddingMode(self, mode):
267
+ '''
268
+ 设置填充模式
269
+ mode: 可选NoPadding,ZeroPadding,PKCS5Padding,PKCS7Padding
270
+ '''
271
+ self.paddingMode = mode
272
+
273
+ def decryptFromBase64(self, entext):
274
+ '''
275
+ 从base64编码字符串编码进行AES解密
276
+ entext: 数据类型str
277
+ '''
278
+ mData = MData(characterSet=self.characterSet)
279
+ self.data = mData.fromBase64(entext)
280
+ return self.__decrypt()
281
+
282
+ def decryptFromHexStr(self, entext):
283
+ '''
284
+ 从hexstr编码字符串编码进行AES解密
285
+ entext: 数据类型str
286
+ '''
287
+ mData = MData(characterSet=self.characterSet)
288
+ self.data = mData.fromHexStr(entext)
289
+ return self.__decrypt()
290
+
291
+ def decryptFromString(self, entext):
292
+ '''
293
+ 从字符串进行AES解密
294
+ entext: 数据类型str
295
+ '''
296
+ mData = MData(characterSet=self.characterSet)
297
+ self.data = mData.fromString(entext)
298
+ return self.__decrypt()
299
+
300
+ def decryptFromBytes(self, entext):
301
+ '''
302
+ 从二进制进行AES解密
303
+ entext: 数据类型bytes
304
+ '''
305
+ self.data = entext
306
+ return self.__decrypt()
307
+
308
+ def encryptFromString(self, data):
309
+ '''
310
+ 对字符串进行AES加密
311
+ data: 待加密字符串,数据类型为str
312
+ '''
313
+ self.data = data.encode(self.characterSet)
314
+ return self.__encrypt()
315
+
316
+ def __encrypt(self):
317
+ if self.mode == AES.MODE_CBC:
318
+ aes = AES.new(self.key, self.mode, self.iv)
319
+ elif self.mode == AES.MODE_ECB:
320
+ aes = AES.new(self.key, self.mode)
321
+ else:
322
+ print("不支持这种模式")
323
+ return
324
+
325
+ data = self.__paddingData(self.data)
326
+ enData = aes.encrypt(data)
327
+ return MData(enData)
328
+
329
+ def __decrypt(self):
330
+ if self.mode == AES.MODE_CBC:
331
+ aes = AES.new(self.key, self.mode, self.iv)
332
+ elif self.mode == AES.MODE_ECB:
333
+ aes = AES.new(self.key, self.mode)
334
+ else:
335
+ print("不支持这种模式")
336
+ return
337
+ data = aes.decrypt(self.data)
338
+ mData = MData(self.__stripPaddingData(data), characterSet=self.characterSet)
339
+ return mData
340
+
341
+
342
+ # if __name__ == '__main__':
343
+ # key = b"1234567812345678"
344
+ # iv = b"0000000000000000"
345
+ # aes = AEScryptor(key, AES.MODE_CBC, iv, paddingMode="ZeroPadding", characterSet='utf-8')
346
+ #
347
+ # data = "好好学习"
348
+ # rData = aes.encryptFromString(data)
349
+ # print("密文:", rData.toBase64())
350
+ # rData = aes.decryptFromBase64(rData.toBase64())
351
+ # print("明文:", rData)
@@ -0,0 +1,29 @@
1
+ import encodings
2
+ import os
3
+ import pkgutil
4
+
5
+
6
+ class BaseEncoding(object):
7
+
8
+ def __init__(self):
9
+ pass
10
+
11
+ def all_encodings(self):
12
+ """
13
+
14
+ :return:
15
+ """
16
+ modnames = set([modname for importer, modname, ispkg in pkgutil.walk_packages(
17
+ path=[os.path.dirname(encodings.__file__)], prefix='')])
18
+ aliases = set(encodings.aliases.aliases.values())
19
+ return modnames.union(aliases)
20
+
21
+ def is_encoding(self,text=b'\x96'):
22
+ for enc in self.all_encodings():
23
+ try:
24
+ msg = text.decode(enc)
25
+ except Exception:
26
+ continue
27
+ print('Decoding {t} with {enc} is {m}'.format(t=text, enc=enc, m=msg))
28
+
29
+ # BaseEncoding().is_encoding(b'\0\x93')
@@ -0,0 +1,86 @@
1
+ class BaseEsDSL(object):
2
+ """
3
+ 将条件转换成dsl语句
4
+ """
5
+
6
+ def __init__(self):
7
+ self.size = 10000
8
+ self.dsl = {}
9
+ # 字段列表
10
+ self.source = []
11
+
12
+ def set_size(self, size):
13
+ """
14
+ 设置返回大小一般为10000
15
+ :param size:
16
+ :return:
17
+ """
18
+ self.size = size
19
+ return self
20
+
21
+ def set_source(self, source):
22
+ """
23
+ 字段列表
24
+ 例如 ["keyid", "lngid", "title", "author", "pub_year", "source_type"]
25
+ :param source:
26
+ :return:
27
+ """
28
+ self.source = source
29
+
30
+ def term(self, key, values, is_keyword=True):
31
+ if is_keyword:
32
+ key = key + ".keyword"
33
+ return {"term": {key, values}}
34
+
35
+ def terms(self, key, lists: list):
36
+ """
37
+ terms:查询某个字段里含有多个关键词的文档
38
+ :param key:
39
+ :param lists:
40
+ :return:
41
+ """
42
+ return {"terms": {key: lists}}
43
+
44
+ def match(self, key, values, is_fuzziness=True):
45
+ """
46
+ 注意 match 和 match_phrase 之间的关系是should
47
+ :param key:
48
+ :param values:
49
+ :param is_fuzziness:
50
+ :return:
51
+ """
52
+ if is_fuzziness:
53
+ values = {"query": values, "fuzziness": "1"}
54
+ return {"match": {key, values}}
55
+
56
+ def match_phrase(self, key, values):
57
+ """
58
+ 注意 match 和 match_phrase 之间的关系是should
59
+ :return:
60
+ """
61
+ return {"match_phrase": {key, values}}
62
+
63
+ def range(self, key, dicts):
64
+ """
65
+ key 比如 pub_year
66
+ 传入一个字典 {"gte": "2011", "lte": "2021"}
67
+ :param key:
68
+ :param dicts:
69
+ :return:
70
+ """
71
+ return {"range": {key: dicts}}
72
+
73
+ def get_must(self):
74
+ """
75
+ 获取一个must的结构
76
+ :return:
77
+ """
78
+ return {"bool": {"must": []}}
79
+
80
+ def set_query(self, dicts):
81
+ self.dsl["query"] = dicts
82
+
83
+ def build(self):
84
+ self.dsl["size"] = self.size
85
+ self.dsl["_source"] = self.source
86
+ self.set_query(self.get_must())