encrypt.py
1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import os
import random
import argparse
from datetime import datetime
from Crypto.PublicKey import RSA
from consts import PRIVATE_KEY_NAME, CERT_NAME, SPLIT_CHAR, DEFAULT_MAC
parser = argparse.ArgumentParser(description='encrypt expire date & mac address with private key')
parser.add_argument('-d', '--date', help='expire date. eg: 2020-06-06', required=True)
parser.add_argument('-m', '--mac', default=DEFAULT_MAC, help='mac address')
args = parser.parse_args()
def get_exponent_and_modulus(private_key_path):
with open(private_key_path, 'r') as private_fp:
private_key = RSA.import_key(private_fp.read())
return private_key.d, private_key.n
def get_encrypt_int(mac, expire_date):
encrypt_bytes = "{0}{3}{1}{3}{2}".format(mac, str(random.random()), expire_date, SPLIT_CHAR).encode('utf-8')
return int.from_bytes(encrypt_bytes, byteorder='big')
def main():
try:
expire_date = datetime.strptime(args.date, '%Y-%m-%d')
except Exception as e:
print('expire date format error. eg: 2020-06-06')
return
if datetime.today() >= expire_date:
print('expire date must later than today')
return
base_dir = os.path.dirname(os.path.abspath(__file__))
private_key_path = os.path.join(base_dir, PRIVATE_KEY_NAME)
output_path = os.path.join(base_dir, CERT_NAME)
encrypt_int = get_encrypt_int(args.mac, args.date)
d, n = get_exponent_and_modulus(private_key_path)
signature = pow(encrypt_int, d, n)
with open(output_path, 'wb') as fp:
fp.write(str(signature).encode("utf-8"))
if __name__ == '__main__':
main()