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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
import argparse
import base64
import nacl.encoding
from nacl.secret import SecretBox
from nacl.hash import blake2b
def create_secret_box(key):
key = blake2b(key, encoder=nacl.encoding.RawEncoder)
box = SecretBox(key)
return box
def encrypt_text(header, key, nonce):
box = create_secret_box(key)
if nonce is not None:
encrypted_header = box.encrypt(header, nonce=nonce)
else:
encrypted_header = box.encrypt(header)
return encrypted_header
def decrypt_text(encrypted_header, key):
box = create_secret_box(key)
decrypted_header = box.decrypt(encrypted_header)
return decrypted_header
def set_encoding(args, type_, text):
output = text
if type_ == 'encode':
if args.hex:
output = base64.b16encode(text)
elif args.base32:
output = base64.b32encode(text)
elif args.base64:
output = base64.b64encode(text)
elif type_ == 'decode':
if args.hex:
output = base64.b16decode(text)
elif args.base32:
output = base64.b32decode(text)
elif args.base64:
output = base64.b64decode(text)
return output
def set_up_parser_args():
new_parser = argparse.ArgumentParser(description="Encrypt or Decrypt a text.")
enc_group = new_parser.add_mutually_exclusive_group()
enc_group.add_argument("-r", "--raw", action="store_true",
help="Encrypted text(and nonce if it is there) will be given in raw")
enc_group.add_argument("-H", "--hex", action="store_true",
help="Encrypted text(and nonce if it is there) will be given in hex")
enc_group.add_argument("-b", "--base32", action="store_true",
help="Encrypted text(and nonce if it is there) will be given in base32")
enc_group.add_argument("-B", "--base64", action="store_true",
help="Encrypted text(and nonce if it is there) will be given in base64")
subparsers = new_parser.add_subparsers(dest="command", help="encrypt or decrypt")
encrypt_parser = subparsers.add_parser("encrypt", help="Encrypt a text")
encrypt_parser.add_argument("-t", "--text", type=str, required=True, help="Text to encrypt")
encrypt_parser.add_argument("-k", "--key", type=str, required=True, help="Encryption key")
encrypt_parser.add_argument("-n", "--nonce", type=str, required=False, help="Encryption nonce")
decrypt_parser = subparsers.add_parser("decrypt", help="Decrypt a text")
decrypt_parser.add_argument("-t", "--encrypted_text", type=str, required=True, help="Encrypted text")
decrypt_parser.add_argument("-k", "--key", type=str, required=True, help="Decryption key")
args = new_parser.parse_args()
return args
def main():
args = set_up_parser_args()
if args.command == "encrypt":
text = args.text.encode()
key = args.key.encode()
if args.nonce is not None:
nonce = set_encoding(args, 'decode', args.nonce)
else:
nonce = None
encrypted_text = encrypt_text(text, key, nonce)
if args.raw:
print(set_encoding(args, 'encode', encrypted_text))
else:
print(set_encoding(args, 'encode', encrypted_text).decode())
elif args.command == "decrypt":
encrypted_text = set_encoding(args, 'decode', args.encrypted_text)
key = args.key.encode()
decrypted_text = decrypt_text(encrypted_text, key)
print(decrypted_text.decode())
if __name__ == "__main__":
main()
|