Skip to content

Python codecs extension featuring CLI tools for encoding/decoding anything

License

Notifications You must be signed in to change notification settings

techsd/python-codext

Repository files navigation

CodExt Tweet

Encode/decode anything.

PyPiRead The DocsBuild StatusCoverage StatusPython VersionsRequirements StatusKnown VulnerabilitiesDOILicense

This library extends the native codecs library (namely for adding new custom encodings and character mappings) and provides a myriad of new encodings (static or parametrized, like rot or xor), hence its named combining CODecs EXTension.

$ pip install codext
Want to contribute a new codec ?Want to contribute a new macro ?
Check the documentation first
Then PR your new codec
PR your updated version of macros.json

🔍 Demonstrations

Using CodExt from the command line

Using base tools from the command line

Using the debase command line tool

💻 Usage (main CLI tool) Tweet on codext

$ codext -i test.txt encode dna-1 GTGAGCGGGTATGTGA $ echo -en "test" | codext encode morse - . ... - $ echo -en "test" | codext encode braille ⠞⠑⠎⠞ $ echo -en "test" | codext encode base100 👫👜👪👫 

Chaining codecs

$ echo -en "Test string"| codext encode reverse gnirts tseT $ echo -en "Test string"| codext encode reverse morse --. -. .. .-. - ... / - ... . - $ echo -en "Test string"| codext encode reverse morse dna-2 AGTCAGTCAGTGAGAAAGTCAGTGAGAAAGTGAGTGAGAAAGTGAGTCAGTGAGAAAGTCAGAAAGTGAGTGAGTGAGAAAGTTAGAAAGTCAGAAAGTGAGTGAGTGAGAAAGTGAGAAAGTC $ echo -en "Test string"| codext encode reverse morse dna-2 octal 101107124103101107124103101107124107101107101101101107124103101107124107101107101101101107124107101107124107101107101101101107124107101107124103101107124107101107101101101107124103101107101101101107124107101107124107101107124107101107101101101107124124101107101101101107124103101107101101101107124107101107124107101107124107101107101101101107124107101107101101101107124103 $ echo -en "AGTCAGTCAGTGAGAAAGTCAGTGAGAAAGTGAGTGAGAAAGTGAGTCAGTGAGAAAGTCAGAAAGTGAGTGAGTGAGAAAGTTAGAAAGTCAGAAAGTGAGTGAGTGAGAAAGTGAGAAAGTC"| codext -d dna-2 morse reverse test string

Using macros

$ codext add-macro my-encoding-chain gzip base63 lzma base64 $ codext list macros example-macro, my-encoding-chain $ echo -en "Test string"| codext encode my-encoding-chain CQQFAF0AAIAAABuTgySPa7WaZC5Sunt6FS0ko71BdrYE8zHqg91qaqadZIR2LafUzpeYDBalvE///ug4AA== $ codext remove-macro my-encoding-chain $ codext list macros example-macro

💻 Usage (base CLI tool) Tweet on debase

$ echo "Test string !" | base122 *.7!ft9�-f9Â $ echo "Test string !" | base91 "ONK;WDZM%Z%xE7L $ echo "Test string !" | base91 | base85 B2P|BJ6A+nO(j|-cttl% $ echo "Test string !" | base91 | base85 | base36 | base58-flickr QVx5tvgjvCAkXaMSuKoQmCnjeCV1YyyR3WErUUErFf $ echo "Test string !" | base91 | base85 | base36 | base58-flickr | base58-flickr -d | base36 -d | base85 -d | base91 -d Test string ! 
$ echo "Test string !" | base91 | base85 | base36 | base58-flickr | debase -m 3 Test string ! $ echo "Test string !" | base91 | base85 | base36 | base58-flickr | debase -f Test Test string ! 

💻 Usage (Python)

Getting the list of available codecs:

>>>importcodext>>>codext.list() ['ascii85', 'base85', 'base100', 'base122', ..., 'tomtom', 'dna', 'html', 'markdown', 'url', 'resistor', 'sms', 'whitespace', 'whitespace-after-before'] >>>codext.encode("this is a test", "base58-bitcoin") 'jo91waLQA1NNeBmZKUF'>>>codext.encode("this is a test", "base58-ripple") 'jo9rA2LQwr44eBmZK7E'>>>codext.encode("this is a test", "base58-url") 'JN91Wzkpa1nnDbLyjtf'>>>codecs.encode("this is a test", "base100") '👫👟👠👪🐗👠👪🐗👘🐗👫👜👪👫'>>>codecs.decode("👫👟👠👪🐗👠👪🐗👘🐗👫👜👪👫", "base100") 'this is a test'>>>foriinrange(8): print(codext.encode("this is a test", "dna-%d"% (i+1))) GTGAGCCAGCCGGTATACAAGCCGGTATACAAGCAGACAAGTGAGCGGGTATGTGACTCACGGACGGCCTATAGAACGGCCTATAGAACGACAGAACTCACGCCCTATCTCAACAGATTGATTAACGCGTGGATTAACGCGTGGATGAGTGGACAGATAAACGCACAGAGACATTCATTAAGCGCTCCATTAAGCGCTCCATCACTCCAGACATAAAGCGAGACTCTGTAAGTAATTCGCGAGGTAATTCGCGAGGTAGTGAGGTCTGTATTTCGCTCTGTGTCTAACTAATTGCGCACCTAATTGCGCACCTACTCACCTGTCTATTTGCGTGTCGAGTGCCTGCCGGATATCTTGCCGGATATCTTGCTGTCTTGAGTGCGGGATAGAGTCACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT>>>codext.decode("GTGAGCCAGCCGGTATACAAGCCGGTATACAAGCAGACAAGTGAGCGGGTATGTGA", "dna-1") 'this is a test'>>>codecs.encode("this is a test", "morse") '- .... .. ... / .. ... / .- / - . ... -'>>>codecs.decode("- .... .. ... / .. ... / .- / - . ... -", "morse") 'this is a test'>>>withopen("morse.txt", 'w', encoding="morse") asf: f.write("this is a test") 14>>>withopen("morse.txt",encoding="morse") asf: f.read() 'this is a test'>>>codext.decode(""" =  X  :  x  n  r  y  Y  y  p  a  `  n  |  a o  h  `  g  o  z """, "whitespace-after+before") 'CSC{not_so_invisible}'>>>print(codext.encode("An example test string", "baudot-tape")) ***.** . ****.** . .** .* . *** .****.**** .** .** . **. * .***. **. ** . **. **. ****. *.****.** .*

📃 List of codecs

BaseXX

  • ascii85: classical ASCII85 (Python3 only)
  • baseN: see base encodings (incl base32, 36, 45, 58, 62, 63, 64, 91, 100, 122)
  • base-genericN: see base encodings ; supports any possible base

Binary

  • baudot: supports CCITT-1, CCITT-2, EU/FR, ITA1, ITA2, MTK-2 (Python3 only), UK, ...
  • baudot-spaced: variant of baudot ; groups of 5 bits are whitespace-separated
  • baudot-tape: variant of baudot ; outputs a string that looks like a perforated tape
  • bcd: Binary Coded Decimal, encodes characters from their (zero-left-padded) ordinals
  • bcd-extended0: variant of bcd ; encodes characters from their (zero-left-padded) ordinals using prefix bits 0000
  • bcd-extended1: variant of bcd ; encodes characters from their (zero-left-padded) ordinals using prefix bits 1111
  • excess3: uses Excess-3 (aka Stibitz code) binary encoding to convert characters from their ordinals
  • gray: aka reflected binary code
  • manchester: XORes each bit of the input with 01
  • manchester-inverted: variant of manchester ; XORes each bit of the input with 10
  • rotateN: rotates characters by the specified number of bits (N belongs to [1, 7] ; Python 3 only)

Common

  • a1z26: keeps words whitespace-separated and uses a custom character separator
  • cases: set of case-related encodings (including camel-, kebab-, lower-, pascal-, upper-, snake- and swap-case, slugify, capitalize, title)
  • dummy: set of simple encodings (including replace, reverse, word-reverse, substite and strip-spaces)
  • octal: dummy octal conversion (converts to 3-digits groups)
  • octal-spaced: variant of octal ; dummy octal conversion, handling whitespace separators
  • ordinal: dummy character ordinals conversion (converts to 3-digits groups)
  • ordinal-spaced: variant of ordinal ; dummy character ordinals conversion, handling whitespace separators

Compression

  • gzip: standard Gzip compression/decompression
  • lz77: compresses the given data with the algorithm of Lempel and Ziv of 1977
  • lz78: compresses the given data with the algorithm of Lempel and Ziv of 1978
  • pkzip_deflate: standard Zip-deflate compression/decompression
  • pkzip_bzip2: standard BZip2 compression/decompression
  • pkzip_lzma: standard LZMA compression/decompression

⚠️ Compression functions are of course definitely NOT encoding functions ; they are implemented for leveraging the .encode(...) API from codecs.

Cryptography

  • affine: aka Affine Cipher
  • atbash: aka Atbash Cipher
  • bacon: aka Baconian Cipher
  • barbie-N: aka Barbie Typewriter (N belongs to [1, 4])
  • citrix: aka Citrix CTX1 passord encoding
  • rotN: aka Caesar cipher (N belongs to [1,25])
  • scytaleN: encrypts using the number of letters on the rod (N belongs to [1,[)
  • shiftN: shift ordinals (N belongs to [1,255])
  • xorN: XOR with a single byte (N belongs to [1,255])

⚠️ Crypto functions are of course definitely NOT encoding functions ; they are implemented for leveraging the .encode(...) API from codecs.

Hashing

  • blake: includes BLAKE2b and BLAKE2s (Python 3 only ; relies on hashlib)
  • checksums: includes Adler32 and CRC32 (relies on zlib)
  • crypt: Unix's crypt hash for passwords (Python 3 and Unix only ; relies on crypt)
  • md: aka Message Digest ; includes MD4 and MD5 (relies on hashlib)
  • sha: aka Secure Hash Algorithms ; includes SHA1, 224, 256, 384, 512 (Python2/3) but also SHA3-224, -256, -384 and -512 (Python 3 only ; relies on hashlib)
  • shake: aka SHAKE hashing (Python 3 only ; relies on hashlib)

⚠️ Hash functions are of course definitely NOT encoding functions ; they are implemented for convenience with the .encode(...) API from codecs and useful for chaning codecs.

Languages

  • braille: well-known braille language (Python 3 only)
  • ipsum: aka lorem ipsum
  • leetspeak: based on minimalistic elite speaking rules
  • morse: uses whitespace as a separator
  • navajo: only handles letters (not full words from the Navajo dictionary)
  • radio: aka NATO or radio phonetic alphabet
  • southpark: converts letters to Kenny's language from Southpark (whitespace is also handled)
  • southpark-icase: case insensitive variant of southpark
  • tomtom: similar to morse, using slashes and backslashes

Others

  • dna: implements the 8 rules of DNA sequences (N belongs to [1,8])
  • html: implements entities according to this reference
  • letter-indices: encodes consonants and/or vowels with their corresponding indices
  • markdown: unidirectional encoding from Markdown to HTML
  • url: aka URL encoding

Steganography

  • klopf: aka Klopf code ; Polybius square with trivial alphabetical distribution
  • resistor: aka resistor color codes
  • sms: also called T9 code ; uses "-" as a separator for encoding, "-" or "_" or whitespace for decoding
  • whitespace: replaces bits with whitespaces and tabs
  • whitespace_after_before: variant of whitespace ; encodes characters as new characters with whitespaces before and after according to an equation described in the codec name (e.g. "whitespace+2*after-3*before")

👏 Supporters

Stargazers repo roster for @dhondta/python-codext

Forkers repo roster for @dhondta/python-codext

Back to top

About

Python codecs extension featuring CLI tools for encoding/decoding anything

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python100.0%