Created
March 13, 2017 06:53
-
-
Save amane-katagiri/66bd6f8610f4212351d98255aea39ba9 to your computer and use it in GitHub Desktop.
Implementation of "https?://some.domain.under.cdn.cloudflare.example.com/cdn-cgi/l/email-protection#{encoded_email_address}".
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def protect_email(key: int, data: bytes) -> bytes: | |
return bytes([x ^ (key % 256) for x in b"\x00" + data]) | |
def deprotect_email(data: bytes) -> bytes: | |
return bytes([x ^ data[0] for x in data[1:]]) | |
def main(): | |
import argparse | |
import random | |
def str_to_bytes(data: str) -> bytes: | |
return bytes([int(x + y, base=16) for x, y in zip(*[iter(data)] * 2)]) | |
def bytes_to_str(data: bytes) -> str: | |
return "".join(["{:02x}".format(x) for x in data]) | |
parser = argparse.ArgumentParser(description="Encode or decode your e-mail address.") | |
parser.add_argument("data", type=str, nargs="?", default="", | |
help="a encoded or plain e-mail address") | |
parser.add_argument("-d", "--decode", dest="act", action="store_const", | |
const=lambda _, x: str(deprotect_email(str_to_bytes(x)), "utf-8"), | |
default=lambda k, b: bytes_to_str(protect_email(k, bytes(b, "utf-8"))), | |
help="decode an encoded e-mail address") | |
parser.add_argument("-k", "--key", type=int, default=random.randint(0, 255), | |
help="key to encode 'data' (ignore in decode mode)") | |
args = parser.parse_args() | |
return args.act(args.key, args.data if args.data else input()) | |
if __name__ == "__main__": | |
print(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment