很抱歉,如果标题没有意义的话,我的标题很差
合理的代码从if argv[2] == pram[2]:
行开始
Code:
from Crypto.Cipher import AES
from base64 import b64encode, b64decode
KEY = 'G$xUHGGPF#abfg&9'
class Crypt:
def __init__(self, salt='SlTKeYOpHygTYkP3'):
self.salt = salt
self.enc_dec_method = 'utf-8'
def encrypt(self, str_to_enc, str_key):
try:
aes_obj = AES.new(str_key, AES.MODE_CFB, self.salt)
hx_enc = aes_obj.encrypt(str_to_enc)
mret = b64encode(hx_enc).decode(self.enc_dec_method)
return mret
except:
pass
def decrypt(self, enc_str, str_key):
try:
aes_obj = AES.new(str_key, AES.MODE_CFB, self.salt)
str_tmp = b64decode(enc_str.encode(self.enc_dec_method))
str_dec = aes_obj.decrypt(str_tmp)
mret = str_dec.decode(self.enc_dec_method)
return mret
except:
pass
if __name__ == '__main__':
from sys import argv, exit
from pathlib import Path
crypt = Crypt()
pram = ["-e", "-d", "-ef", "-df"]
try:
if len(argv[1:]) > 2 or len(argv[1:]) == 0 or (len(argv) == 3 and not (argv[1] in pram[2:])):
raise Exception
if argv[1] not in pram:
raise Exception
if (argv[1] in pram[2:]) and len(argv[1:]) == 1:
raise Exception
elif argv[1] in pram[2:]:
if not Path(argv[2]).is_file():
raise FileNotFoundError
if argv[1] == pram[0]:
print(crypt.encrypt(str(input('ENCRYPT> ')), KEY))
if argv[1] == pram[1]:
print(crypt.decrypt(str(input('DECRYPT> ')), KEY))
##########
#FROM HERE
##########
if argv[1] == pram[2]:
try:
with open(argv[2], 'r+', encoding='utf-8') as f:
for_test=f.readlines()
print([_.replace('\n','') for _ in for_test])
enc = [crypt.encrypt(_.replace('\n',''), KEY)+'\n' for _ in for_test]
enc[-1] = enc[-1].rstrip('\n')
f.truncate(0)
for _ in range(len(enc)):
f.write(enc[_])
print(enc)
if enc != None:
print(f'{argv[2]} is now encrypted.')
except:
raise
if argv[1] == pram[3]:
try:
with open(argv[2], 'r+', encoding='utf-8') as f:
enc = [crypt.decrypt(_.replace('\n',''), KEY)+'\n' for _ in f.readlines()]
enc[-1] = enc[-1].rstrip('\n')
if any([True for _ in enc if _ is None]):
print('Failed to Decrypt!')
exit(0)
f.truncate(0)
for _ in range(len(enc)):
f.write(enc[_])
print(enc)
if enc != None:
print(f'{argv[2]} is now decrypted.')
except:
print('Failed to Decrypt!')
##########
#TILL HERE
##########
except FileNotFoundError:
print('No such file or directory exists')
except Exception as e:
print("""Improper parameters provided:
-e; -d; -ef <file>; -df <file>""")
每次我用-xf参数运行上面的脚本时,它都会对文件进行加密和解密,但会不断在文件的第一行添加空格或一些不可见的字符, 以下供参考-
Let the file be test.txt with these 3 lines-
#Before using the script, In notepad:
sagar
manish
deepak
####################################
$ D:\> python .\crypt.py -ef .\test.txt
['sagar', 'manish', 'deepak']
['JLGSPlA=\n', 'OkR3fipr\n', 'M+wzlave']
.\test.txt is now encrypted.
#Now, In Notepad:
JLGSPlA=
OkR3fipr
M+wzlave
####################################
D:\> python .\crypt.py -df .\test.txt
['sagar\n', 'manish\n', 'deepak']
.\test.txt is now decrypted.
#Now, In Notepad:
sagar
manish
deepak
####################################
D:\> python .\crypt.py -ef .\test.txt
['\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00sagar', 'manish', 'deepak']
['V6cCTqkeReagrMBO1ygXclSKS4O16BF1pjWetDNEiwth/wY5f/Hj7UPew8bJKPLNInFsDIVn\n', 'OkR3fipr\n', 'M+wzlave']
.\test.txt is now encrypted.
#Now, In Notepad:
V6cCTqkeReagrMBO1ygXclSKS4O16BF1pjWetDNEiwth/wY5f/Hj7UPew8bJKPLNInFsDIVn
OkR3fipr
M+wzlave
####################################
D:\> python .\crypt.py -df .\test.txt
['\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00sagar\n', 'manish\n', 'deepak']
.\test.txt is now decrypted.
#In Notepad
sagar
manish
deepak
####################################
为什么会这样,这是我第一次经历这样的事情。任何帮助都将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐