commit
26d42b7ac6
1 changed files with 53 additions and 0 deletions
@ -0,0 +1,53 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
|
||||||
|
import os, sys, tempfile,getopt |
||||||
|
from cryptography.fernet import Fernet |
||||||
|
|
||||||
|
def main(): |
||||||
|
try: |
||||||
|
opts, args = getopt.getopt(sys.argv[1:],'k:K:n') |
||||||
|
except: |
||||||
|
usage() |
||||||
|
sys.exit(2) |
||||||
|
|
||||||
|
key = '' |
||||||
|
for opt, val in opts: |
||||||
|
if opt == '-n': |
||||||
|
# Print a new key and exit |
||||||
|
print(Fernet.generate_key().decode()) |
||||||
|
exit(0) |
||||||
|
if opt == '-k': |
||||||
|
key = val |
||||||
|
elif opt == '-K': |
||||||
|
key = open(arg, 'rb').read() |
||||||
|
|
||||||
|
if key == '': |
||||||
|
usage() |
||||||
|
sys.exit(2) |
||||||
|
|
||||||
|
# Create a fernet object using our key |
||||||
|
f = Fernet(key) |
||||||
|
# This temp file will hold the decrypted content while we edit it |
||||||
|
tmp = tempfile.NamedTemporaryFile() |
||||||
|
# We open the file, which contains the encrypted content |
||||||
|
crypt = open(args[0], 'rb').read() |
||||||
|
# And we decrypt it, and write it in the temp file |
||||||
|
clear = f.decrypt(crypt) |
||||||
|
tmp.write(clear) |
||||||
|
tmp.flush() |
||||||
|
# Now, lets open our favorite editor to edit the file |
||||||
|
os.system(os.getenv('EDITOR', 'vim') + ' ' + tmp.name) |
||||||
|
# We closed the editor, we just have to open the cleartext file, encrypt its content |
||||||
|
# and save it |
||||||
|
clear = open(tmp.name, 'rb').read() |
||||||
|
os.unlink(tmp.name) |
||||||
|
wcrypt = open(args[0], 'wb') |
||||||
|
wcrypt.write(f.encrypt(clear)) |
||||||
|
wcrypt.flush() |
||||||
|
wcrypt.close() |
||||||
|
|
||||||
|
def usage(): |
||||||
|
print(argv[0] + ' [-k secret] [-K ./secret.txt] variables.json') |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
main() |
Loading…
Reference in new issue