mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2025-12-14 08:06:23 +08:00
- Update Recent 30 mechanism. - Alter Recent 30 table structure. Note: 1. This is a TEST version. Maybe there are many bugs. 2. This special version is a line of demarcation.
75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
import hashlib
|
||
import os
|
||
from datetime import date
|
||
from time import mktime
|
||
|
||
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
||
|
||
|
||
def aes_gcm_128_encrypt(key, plaintext, associated_data):
|
||
iv = os.urandom(12)
|
||
encryptor = Cipher(
|
||
algorithms.AES(key),
|
||
modes.GCM(iv, min_tag_length=12),
|
||
).encryptor()
|
||
encryptor.authenticate_additional_data(associated_data)
|
||
ciphertext = encryptor.update(plaintext) + encryptor.finalize()
|
||
return (iv, ciphertext, encryptor.tag)
|
||
|
||
|
||
def aes_gcm_128_decrypt(key, associated_data, iv, ciphertext, tag):
|
||
decryptor = Cipher(
|
||
algorithms.AES(key),
|
||
modes.GCM(iv, tag, min_tag_length=12),
|
||
).decryptor()
|
||
decryptor.authenticate_additional_data(associated_data)
|
||
return decryptor.update(ciphertext) + decryptor.finalize()
|
||
|
||
|
||
def md5(code: str) -> str:
|
||
# md5加密算法
|
||
code = code.encode()
|
||
md5s = hashlib.md5()
|
||
md5s.update(code)
|
||
codes = md5s.hexdigest()
|
||
|
||
return codes
|
||
|
||
|
||
def get_file_md5(file_path: str) -> str:
|
||
'''计算文件MD5,假设是文件'''
|
||
myhash = hashlib.md5()
|
||
with open(file_path, 'rb') as f:
|
||
while True:
|
||
b = f.read(8192)
|
||
if not b:
|
||
break
|
||
myhash.update(b)
|
||
|
||
return myhash.hexdigest()
|
||
|
||
|
||
def try_rename(path: str, new_path: str) -> str:
|
||
'''尝试重命名文件,并尝试避免命名冲突(在后面加自增数字),返回最终路径'''
|
||
final_path = new_path
|
||
if os.path.exists(new_path):
|
||
i = 1
|
||
while os.path.exists(new_path + str(i)):
|
||
i += 1
|
||
|
||
final_path = new_path + str(i)
|
||
|
||
os.rename(path, final_path)
|
||
return final_path
|
||
|
||
|
||
def get_today_timestamp():
|
||
'''相对于本机本地时间的今天0点的时间戳'''
|
||
return int(mktime(date.today().timetuple()))
|
||
|
||
|
||
def parse_version(s: str) -> 'list[int]':
|
||
'''解析版本号'''
|
||
s_number = "".join(x for x in s if x.isdigit() or x == '.')
|
||
return list(map(int, [x for x in s_number.split('.') if x != '']))
|