Ahmad Hammoudeh commited on
Commit
c4e3242
·
1 Parent(s): d6b31e0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -2
app.py CHANGED
@@ -26,6 +26,42 @@ iface.launch()
26
 
27
 
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  def AES_encrypt(User_message,seed, publicKey,encoding = 1, padding = 30):
30
  #number conversion to encrypt non-english content
31
  User_message_numbered = (int.from_bytes(bytes(User_message, 'utf-16'), "big"))
@@ -50,8 +86,6 @@ def AES_encrypt(User_message,seed, publicKey,encoding = 1, padding = 30):
50
  return encMessage_int
51
 
52
 
53
-
54
-
55
  class AESCipher(object):
56
  def __init__(self, key):
57
  self.bs = AES.block_size
@@ -74,3 +108,39 @@ class AESCipher(object):
74
 
75
  def invert_perm_list(p):
76
  return [p.index(l) for l in range(len(p))]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
 
28
 
29
+
30
+
31
+
32
+ def seedx(path , User_passcode=0, N_days=1, encryption_difficulty = 2**10):
33
+ try:
34
+ with open(path +'indx.txt') as f:
35
+ old_day_index = int(f.read())
36
+ except:
37
+ old_day_index = 0
38
+ print('no old index was found')
39
+ timestamp = datetime.timestamp(datetime.now())
40
+ #total number of days since unix time
41
+ days_span = timestamp/math.factorial(6)/120 + 0.1#*random.random() #first time calculate the days since unix, thae latter randomize the time zone by up to ~7 hours
42
+ day_index = math.floor(days_span/N_days)
43
+ seed = int(day_index**2 + User_passcode)
44
+ if day_index == old_day_index:
45
+ with open('prvt.pem', 'rb') as file:
46
+ key_data = file.read()
47
+ privateKey = rsa.PrivateKey.load_pkcs1(key_data)
48
+ with open('pblc.pem', 'rb') as file:
49
+ key_data = file.read()
50
+ publicKey = rsa.PublicKey.load_pkcs1(key_data)
51
+ else:
52
+ publicKey, privateKey = rsa.newkeys(encryption_difficulty)
53
+ old_day_index = day_index
54
+ #save in a folder
55
+ with open(path +'indx.txt', 'w') as f:
56
+ f.write(str(old_day_index))
57
+ with open(path +'prvt.pem', 'w') as f:
58
+ f.write(privateKey.save_pkcs1().decode('utf-8'))
59
+ with open(path +'pblc.pem', 'w') as f:
60
+ f.write(publicKey.save_pkcs1().decode('utf-8'))
61
+
62
+ return {'seed':seed,'publicKey': publicKey, 'privateKey': privateKey}
63
+
64
+
65
  def AES_encrypt(User_message,seed, publicKey,encoding = 1, padding = 30):
66
  #number conversion to encrypt non-english content
67
  User_message_numbered = (int.from_bytes(bytes(User_message, 'utf-16'), "big"))
 
86
  return encMessage_int
87
 
88
 
 
 
89
  class AESCipher(object):
90
  def __init__(self, key):
91
  self.bs = AES.block_size
 
108
 
109
  def invert_perm_list(p):
110
  return [p.index(l) for l in range(len(p))]
111
+
112
+ def AES_decrypt(encMessage,seed,publicKey, encoding = 1, encryption_difficulty = 2**10, padding = 30):
113
+ if encoding == 0:
114
+ encMessage_byte = encMessage
115
+ elif encoding == 1:
116
+ encMessage_byte = encMessage.encode('utf-16')
117
+ else:
118
+ encMessage_byte = encMessage.to_bytes((encMessage.bit_length() + 7) // 8, "big")
119
+ decMessage = AESCipher(str(publicKey.n)).decrypt(encMessage_byte)
120
+ decMessage_len =len(decMessage) #total number of charachters in the msg
121
+ permutation_list = list(range(0,decMessage_len))
122
+ random.seed(seed)
123
+ random.shuffle(permutation_list)
124
+ inverted_permutation_list = invert_perm_list(permutation_list)
125
+ recovered_list = [decMessage[i] for i in inverted_permutation_list]
126
+ recovered_msg_i_pad = ''.join(recovered_list)
127
+ recovered_msg_i = int(recovered_msg_i_pad[padding:-padding])
128
+ recovered_msg = recovered_msg_i.to_bytes((recovered_msg_i.bit_length() + 7) // 8, "big").decode("utf-16")
129
+ return recovered_msg
130
+
131
+
132
+
133
+ def Encrypt_msg(User_message,user_password,path):
134
+ User_passcode = (int.from_bytes(bytes(str(user_password), 'utf-8'), "little"))
135
+ Num_dict_enc = seedx(path, User_passcode)
136
+ encMessage_i = AES_encrypt(User_message,Num_dict_enc['seed'], Num_dict_enc['publicKey'],encoding = 1, padding = 30)
137
+ #print(encMessage_i)
138
+ return encMessage_i
139
+
140
+
141
+ def Decrypt_msg(encMessage,user_password,path):
142
+ User_passcode = (int.from_bytes(bytes(str(user_password), 'utf-8'), "little"))
143
+ Num_dict_enc = seedx(path, User_passcode)
144
+ recovered_msg = AES_decrypt(encMessage,Num_dict_enc['seed'], Num_dict_enc['publicKey'], encoding = 1, encryption_difficulty = 2**10, padding = 30)
145
+ #print(recovered_msg)
146
+ return recovered_msg