CodExt 
Encode/decode anything.
CodExt is a library (Python 3.10 or later) that extends the native codecs library (namely for adding new custom encodings and character mappings) and provides 150+ new codecs, hence its name combining CODecs EXTension. It also features a guess mode for decoding multiple layers of encoding and CLI tools for convenience.
$ 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
//img.shields.io/badge/Tweet%20(codext)--lightgrey?logo=twitter&style=social" alt="Tweet on codext" height="20"/>
$ 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
//img.shields.io/badge/Tweet%20(unbase)--lightgrey?logo=twitter&style=social" alt="Tweet on unbase" height="20"/>
Playing with base encodings.
$ 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 | unbase -m 3
Test string !
$ echo "Test string !" | base91 | base85 | base36 | base58-flickr | unbase -f Test
Test string !
Usage (CLI)
Listing codecs.
$ codext list encodings
a1z26 adler32 affine alternative-rot ascii
atbash autoclave bacon barbie base
base1 base2 base3 base4 base8
<<snipped>>
Finding a codec based on a name.
$ codext search bitcoin
base58
Encoding a string.
$ echo -en "This is a test" | codext encode polybius
44232443 2443 11 44154344
Encoding a file.
$ echo -en "this is a test" > to_be_encoded.txt
$ codext encode base64 < to_be_encoded.txt > text.b64
$ cat text.b64
dGhpcyBpcyBhIHRlc3Q=
Chaining codecs.
$ echo -en "mrdvm6teie6t2cq=" | codext encode upper | codext decode base32 | codext decode base64
test
Iteratively guessing decodings.
$ echo -en "test" | codext encode base64 gzip | codext guess
Codecs: gzip
dGVzdA==
$ echo -en "test" | codext encode base64 gzip | codext guess gzip -i base
Codecs: gzip, base64
test
Usage (Python)
Getting the list of available codecs.
>>> import codext
>>> codext.list()
['ascii85', 'base85', 'base100', 'base122', ..., 'tomtom', 'dna', 'html', 'markdown', 'url', 'resistor', 'sms', 'whitespace', 'whitespace-after-before']
Playing with some base encodings.
```python
>>> 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'
Playing with some cryptography-based codecs.
>>> codext.encode("This is a test !", "vigenere-MYSECRETKET")
'Ffaw kj e mowm !'
>>> codext.encode("This is a test !", "autoclave-SECRET")
'Llkj ml t amkb !'
Encoding/decoding with various other codecs.
>>> for i in range(8):
print(codext.encode("this is a test", "dna-%d" % (i + 1)))
GTGAGCCAGCCGGTATACAAGCCGGTATACAAGCAGACAAGTGAGCGGGTATGTGA
CTCACGGACGGCCTATAGAACGGCCTATAGAACGACAGAACTCACGCCCTATCTCA
ACAGATTGATTAACGCGTGGATTAACGCGTGGATGAGTGGACAGATAAACGCACAG
AGACATTCATTAAGCGCTCCATTAAGCGCTCCATCACTCCAGACATAAAGCGAGAC
TCTGTAAGTAATTCGCGAGGTAATTCGCGAGGTAGTGAGGTCTGTATTTCGCTCTG
TGTCTAACTAATTGCGCACCTAATTGCGCACCTACTCACCTGTCTATTTGCGTGTC
GAGTGCCTGCCGGATATCTTGCCGGATATCTTGCTGTCTTGAGTGCGGGATAGAGT
CACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT
>>> codext.decode("GTGAGCCAGCCGGTATACAAGCCGGTATACAAGCAGACAAGTGAGCGGGTATGTGA", "dna-1")
'this is a test'
>>> codecs.encode("this is a test", "morse")
'- .... .. ... / .. ... / .- / - . ... -'
>>> codecs.decode("- .... .. ... / .. ... / .- / - . ... -", "morse")
'this is a test'
>>> with open("morse.txt", 'w', encoding="morse") as f:
f.write("this is a test")
14
>>> with open("morse.txt",encoding="morse") as f:
f.read()
'this is a test'
>>> print(codext.encode("An example test string", "baudot-tape"))
***.**
. *
***.*
* .
.*
* .*
. *
** .*
***.**
** .**
.*
* .
* *. *
.*
* *.
* *. *
* .
* *.
* *. *
***.
*.*
***.*
* .*
List of codecs
Barcodes
-
aztec: real (scannable) Aztec code (ISO/IEC 24778) ; optimal high-level compaction, error correction percentage given in the name (e.g.aztec-33; 23% by default), rendered as an image or, withaztec-text, as plain text ; decoding applies Reed-Solomon error correction -
datamatrix: real (scannable) Data Matrix barcode (ISO/IEC 16022, ECC200) ; most compact of the ASCII, C40, Text, X12 and EDIFACT schemes, square or rectangular (datamatrix-rect), rendered as an image or, withdatamatrix-text, as plain text ; decoding applies Reed-Solomon error correction -
fakeqr: hides the input bits as the modules of something that looks like a QR code but is not one, either an image or, with thefakeqr-textvariant, plain text (the 8 QR masks are available asfakeqr-0tofakeqr-7) -
pdf417: real (scannable) PDF417 stacked barcode (ISO/IEC 15438) ; most compact of the Text, Byte and Numeric modes, error correction level given in the name (e.g.pdf417-5; 2 by default), rendered as an image or, withpdf417-text, as plain text ; decoding applies Reed-Solomon error correction -
qr: real (scannable) QR code ; byte mode, error correction level given in the name (qr-l,qr-m,qr-q,qr-h; M by default), rendered as an image or, withqr-text, as plain text ; decoding applies Reed-Solomon error correction
BaseXX
-
base1: useless, but for the sake of completeness -
base2: simple conversion to binary (with a variant with a reversed alphabet) -
base3: conversion to ternary (with a variant with a reversed alphabet) -
base4: conversion to quarternary (with a variant with a reversed alphabet) -
base8: simple conversion to octal (with a variant with a reversed alphabet) -
base10: simple conversion to decimal -
base11: conversion to digits with a "a" -
base16: simple conversion to hexadecimal (with a variant holding an alphabet with digits and letters inverted) -
base26: conversion to alphabet letters -
base32: classical conversion according to the RFC4648 with all its variants (zbase32, extended hexadecimal, geohash, Crockford) -
base36: Base36 conversion to letters and digits (with a variant inverting both groups) -
base38: Base38 encoding of the Matter setup QR codes (chunks of 3 bytes) -
base45: Base45 DRAFT algorithm (with a variant inverting letters and digits) -
base58: multiple versions of Base58 (bitcoin, flickr, ripple) -
base62: Base62 conversion to lower- and uppercase letters and digits (with a variant with letters and digits inverted) -
base63: similar tobase62with the "_" added -
base64: classical conversion according to RFC4648 with its variant URL (or file) (it also holds a variant with letters and digits inverted) -
base67: custom conversion using some more special characters (also with a variant with letters and digits inverted) -
base69: Base69 encoding (chunks of 7 bytes, 2 characters per 7 bits) -
base85: all variants of Base85 (Ascii85, z85, Adobe, (x)btoa, RFC1924, XML) -
base91: Base91 custom conversion -
base100(or emoji): Base100 custom conversion -
base122: Base122 custom conversion -
base128: conversion to the ASCII charset (with control characters) -
base128-latin1: Base128 with printable characters (digits, letters and Latin-1) -
base256: Base256 with one printable character per byte -
base1024(or ecoji): Ecoji custom conversion (10 bits per emoji, versions 1 and 2) -
base2048: Base2048 custom conversion (11 bits per character, optimised for Twitter) -
base32768: Base32768 custom conversion (15 bits per character, optimised for UTF-16) -
base65536: Base65536 custom conversion (16 bits per character, optimised for UTF-32) -
base131072: Base131072 conversion (17 bits per character), as implemented by the base131072 Rust crate -
bech32: Bech32 encoding with a human-readable part ;bech32mfor its Bech32m variant -
leb128(or varint): LEB128 encoding of lists of integers ;sleb128for its signed variant -
base-genericN: see base encodings ; supports any possible base
This category also contains ascii85, adobe, [x]btoa, zeromq with the base85 codec.
Binary
-
baudot: supports CCITT-1, CCITT-2, EU/FR, ITA1, ITA2, MTK-2 (Python3 only), UK, ... -
baudot-spaced: variant ofbaudot; groups of 5 bits are whitespace-separated -
baudot-tape: variant ofbaudot; outputs a string that looks like a perforated tape -
bcd: Binary Coded Decimal, encodes characters from their (zero-left-padded) ordinals -
bcd-extended0: variant ofbcd; encodes characters from their (zero-left-padded) ordinals using prefix bits0000 -
bcd-extended1: variant ofbcd; encodes characters from their (zero-left-padded) ordinals using prefix bits1111 -
chuck-norris: Chuck Norris unary code (runs of the 7-bit ASCII bits written with blocks of zeros) -
differential-manchester: line code writing the bits as transitions at the start of their periods (also inverted) -
elias-gamma,elias-delta: Elias universal codes, encoding characters from their ordinals (or lists of integers with-integers) -
excess3: uses Excess-3 (aka Stibitz code) binary encoding to convert characters from their ordinals -
fibonacci: Fibonacci universal code, encoding characters from their ordinals (or lists of integers with-integers) -
gray: aka reflected binary code -
hamming: Hamming(7,4) error-correcting code, correcting single-bit errors (and detecting double-bit errors withhamming84) -
manchester: XORes each bit of the input with01 -
manchester-inverted: variant ofmanchester; XORes each bit of the input with10 -
nrzi: Non-Return-to-Zero Inverted line code, writing 1 (or 0 withnrzi-space) as a transition -
rotateN: rotates characters by the specified number of bits (N belongs to [1, 7] ; Python 3 only)
Checksums
-
adler: Adler32 algorithm (relies onzlib) -
crc: CRC of lengths 8, 10-17, 21, 24, 30-32, 40, 64, 82 with a variety of polynoms -
fletcher: Fletcher-16, -32 and -64 checksums -
luhn: Luhn mod N algorithm
Ciphers
-
adfgx: aka ADFGX Cipher (Polybius square and columnar transposition) ;adfgvxfor its 6x6 variant -
aer256: aka AER-256 (toy cipher with float arithmetic, from online JavaScript tools) -
affine: aka Affine Cipher -
armon64: aka ARMON-64 (variant of AER-256 with a fourth operation) -
atbash: aka Atbash Cipher -
autoclave: aka Autoclave/Autokey Cipher (variant of Vigenere Cipher) -
bacon: aka Baconian Cipher -
barbie-N: aka Barbie Typewriter (N belongs to [1, 4]) -
bazeries: aka Bazeries Cipher (two Polybius grids and a transposition keyed by a number) -
beaufort: aka Beaufort Cipher (variant of Vigenere Cipher) -
bifid: aka Bifid Cipher (Delastelle's fractionation with a 5x5 Polybius square) ;trifidfor its 3x3x3 cube variant -
chaocipher: aka Chaocipher (two alphabets permuted after each letter) -
columnar: aka Columnar Transposition Cipher (keyword-ordered columns ; a second keyword gives the double transposition) -
enigma: aka Enigma machine (Enigma I, M3 and M4, with reflector, rotors, rings, positions and plugboard) -
ezip64: aka EZIP-64 (variant of ARMON-64 with smaller blocks) -
foursquare: aka Four-square Cipher (bigrams substituted with two keyed squares and two plain ones) -
fractionated-morse: aka Fractionated Morse Cipher (Morse code split into groups of three symbols, each replaced by a letter of a keyed alphabet) -
gronsfeld: aka Gronsfeld Cipher (variant of Vigenere Cipher with a numeric key) -
hill: aka Hill Cipher (blocks of letters multiplied by a key matrix modulo 26) -
nihilist: aka Nihilist Cipher (sums of the Polybius coordinates of the text and of a repeated key) -
okto3: aka OKTO3 (variant of AER-256 with a fourth operation and smaller blocks) -
playfair: aka Playfair Cipher -
phillips: aka Phillips Cipher (polyalphabetic block cipher with 8 key squares) -
polybius: aka Polybius Square Cipher -
porta: aka Porta Cipher (reciprocal variant of Vigenere Cipher with 13 alphabets) -
railfence: aka Rail Fence Cipher -
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]) -
skip: aka Skip Cipher (transposition reading every N-th character, looping on the text) -
trithemius: aka Trithemius Cipher (variant of Vigenere Cipher) -
twosquare: aka Two-square Cipher or Double Playfair (bigrams substituted with two keyed squares, vertically or horizontally) -
vernam: aka Vernam Cipher (XOR with a repeating key) -
vic: aka VIC Cipher -
vigenere: aka Vigenere Cipher -
xorN: XOR with a single byte (N belongs to [1,255]) -
zara128: aka ZARA-128 (variant of AER-256 with additions only and smaller blocks)
⚠️ Ciphers are of course definitely NOT encoding functions ; they are implemented for leveraging the
.encode(...)API fromcodecs.
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 integer, replace, reverse, word-reverse, substite and strip-spaces) -
octal: dummy octal conversion (converts to 3-digits groups) -
octal-spaced: variant ofoctal; dummy octal conversion, handling whitespace separators -
ordinal: dummy character ordinals conversion (converts to 3-digits groups) -
ordinal-spaced: variant ofordinal; dummy character ordinals conversion, handling whitespace separators
Compression
-
gzip: standard Gzip compression/decompression -
huffman: canonical Huffman coding of the bytes, with a self-describing header -
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 -
rle: compresses runs of identical characters with Run-Length Encoding (count before or after each character, compact, bytes or repeated-byte escape variants) -
zstd: Zstandard compression/decompression (relies oncompression.zstdfrom Python 3.14, onbackports.zstdbefore)
⚠️ Compression functions are of course definitely NOT encoding functions ; they are implemented for leveraging the
.encode(...)API fromcodecs.
Esoteric
-
befunge: Befunge-93, two-dimensional esoteric language (encoding generates a program printing the text) -
brainfuck: well-known esoteric programming language (encoding generates a program printing the text) -
church: Church encoding in the lambda calculus (encoding generates a lambda term of the list of the numerals of the bytes) -
cow: esoteric language made of variations of "moo" (Brainfuck-like, with a register and integer output) -
lolcode: esoteric language inspired by lolcats (encoding generates a program printing the text), also with lowercase keywords -
malbolge: esoteric language designed to be as difficult to program in as possible (encoding generates a program printing the text) -
ook: Brainfuck derivative for orang-utans (Ook.,Ook?andOok!), also in its short form -
piet: esoteric language whose programs are images looking like abstract paintings (encoding generates a PNG image of a program printing the text) -
pikalang: Brainfuck derivative using Pikachu's vocabulary
Frequency
-
coquelet: Coquelet 13 and 8 (aka Mk 1 and Mk 2), radio teleprinter systems sending each ITA-2 character as two audio tones (gives their frequencies in Hz) -
dtmf: Dual-Tone Multi-Frequency telephone keypad signaling (gives the frequencies of the tones in Hz, or a WAV recording withdtmf-wav, decoded with the Goertzel algorithm) -
piccolo: Piccolo I, II (aka Mk 6) and III, radio teleprinter systems sending each ITA-2 character as one or two audio tones (gives their frequencies in Hz)
Hashing
-
argon2: aka Argon2 (RFC 9106) with its i, d and id variants (relies onargon2-cffi, e.g. withpip install codext[argon2]) -
bcrypt: aka bcrypt password hash (relies onbcryptwhen available, e.g. withpip install codext[bcrypt], pure Python otherwise) -
bigcrypt: aka BigCrypt (DES-based crypt variant for long passwords) -
blake: includes BLAKE2b and BLAKE2s (Python 3 only ; relies onhashlib) -
bsd-nthash: NT hash in the$3$$modular crypt format of modern BSD -
bsdi-crypt: aka BSDi extended DES crypt (parametrized with the number of rounds) -
cisco-asa: Cisco ASA password hash (parametrized with the user name) -
cisco-pix: Cisco PIX password hash (parametrized with the user name) -
crypt: Unix's crypt hash for passwords (Python 3 and Unix only ; relies oncrypt) -
crypt16: aka crypt16 (DES-based crypt variant with two computations) -
ctph: context triggered piecewise hash of the ctph.js library (as used by CyberChef) -
fnv: aka Fowler-Noll-Vo ; includes FNV-1 and FNV-1a in 32, 64, 128, 256, 512 and 1024 bits -
gosthash: aka Streebog (GOST R 34.11-2012) in 256 and 512 bits -
hmac: keyed-hash message authentication code with MD5, SHA-1, SHA-2, SHA-3 or BLAKE2 (relies onhmac) -
keccak: original Keccak (pre-SHA-3 padding, as used e.g. by Ethereum) in 224, 256, 384 and 512 bits -
ldap-md5: RFC 2307 LDAP password schemes ;ldap-sha1,ldap-salted-md5andldap-salted-sha1for the SHA-1 and salted variants -
lm: aka LAN Manager hash, the legacy Windows password hash (with a pure Python DES) -
md: aka Message Digest ; includes MD2, MD4 (relies onhashlibwhen available, pure Python otherwise), MD5 (relies onhashlib) and MD6 (digest sizes multiple of 8, up to 512 bits) -
mscash: aka MS-CASH / Domain Cached Credentials v1 (parametrized with the user name) ;mscash2for v2 (PBKDF2) -
mssql2000: Microsoft SQL Server 2000 password hash ;mssql2005for the 2005 version -
mysql: MySQL password hashes ; includes the MySQL 3.23 hash and the MySQL 4.1+ native password hash -
ntlm: aka NT hash, the Windows password hash (MD4 of the UTF-16LE password) -
oracle10: legacy Oracle 10g password hash (parametrized with the user name) ;oracle11for the 11g version -
phpass: portable PHP password hash (parametrized with the iteration count ; used e.g. by WordPress) -
ripemd160: aka RIPEMD-160 (relies onhashlibwhen available, pure Python otherwise) -
scrypt: aka scrypt (RFC 7914), parameterized with its cost ln, block size r and parallelism p (relies onhashlib) -
sha: aka Secure Hash Algorithms ; includes SHA0, SHA1, 224, 256, 384, 512 (Python2/3) but also SHA3-224, -256, -384 and -512 (Python 3 only ; relies onhashlib) -
shake: aka SHAKE hashing (Python 3 only ; relies onhashlib) -
snefru: aka Snefru (Merkle's hash function) in 32 to 480 bits, with 2 to 8 passes -
ssdeep: ssdeep fuzzy hash (context triggered piecewise hash, same output as libfuzzy) -
sun-md5-crypt: aka Sun MD5 crypt (parametrized with the number of rounds) -
whirlpool: aka Whirlpool (relies onhashlibwhen available, pure Python otherwise)
⚠️ Hash functions are of course definitely NOT encoding functions ; they are implemented for convenience with the
.encode(...)API fromcodecsand useful for chaning codecs.
Languages
-
braille: well-known braille language (Python 3 only) -
fancy: Unicode styled alphabets (mathematical bold, italic, script, fraktur, double-struck, ..., circled and parenthesized letters), alsofullwidthandsmallcaps -
ipsum: aka lorem ipsum -
galactic: aka Standard Galactic Alphabet or Minecraft enchantment language (as written by most online translators) -
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 ofsouthpark -
tap: converts text to tap/knock code, commonly used by prisoners (as written by cryptii) -
tomtom: similar tomorse, using slashes and backslashes -
upsidedown: upside-down (flip) text, with turned Unicode characters in reverse order
Obfuscation
-
arabica-2rs: aka ARABICA-2RS (URI-encoded text substituted by Arabic letters, from online JavaScript tools) -
atom128: aka ATOM-128 (Base64 with a shuffled alphabet, from online JavaScript tools) -
chinzo-72c: aka CHINZO-72C (URI-encoded text substituted by Chinese characters, from online JavaScript tools) -
cisco-type7: aka Cisco IOS type 7 password encoding -
citrix: aka Citrix CTX1 password encoding -
esab46: aka ESAB-46 (Base64 with a shuffled alphabet, from online JavaScript tools) -
feron74: aka FERON-74 (Base64 with a shuffled alphabet, from online JavaScript tools) -
gila7: aka GILA7 (Base64 with a shuffled alphabet, from online JavaScript tools) -
hazz15: aka HAZZ-15 (Base64 with a shuffled alphabet, from online JavaScript tools) -
hindia-4x: aka HINDIA-4X (URI-encoded text substituted by Bengali and Devanagari characters, from online JavaScript tools) -
japoo-c2s: aka JAPOO-C2S (URI-encoded text substituted by Chinese and Japanese characters, from online JavaScript tools) -
korex-3s: aka KOREX-3S (URI-encoded text substituted by Korean characters, from online JavaScript tools) -
megan35: aka MEGAN-35 (Base64 with a shuffled alphabet, from online JavaScript tools) -
tigo-3fx: aka TIGO-3FX (Base64 with a shuffled alphabet, from online JavaScript tools) -
tripo-5: aka TRIPO-5 (Base64 with a shuffled alphabet, from online JavaScript tools) -
zong22: aka ZONG22 (Base64 with a shuffled alphabet, from online JavaScript tools)
Others
-
asn1: readable dump of ASN.1 BER/DER elements (e.g. certificates and keys), encoded back to DER -
ber: text as an ASN.1 BER string element (decoding indefinite lengths and segmented strings) -
binhex: BinHex 4.0 (.hqx), the binary-to-text encoding of the classic Mac OS -
der: text as an ASN.1 DER string element (UTF8String) -
dna: implements the 8 rules of DNA sequences (N belongs to [1,8]) -
dvorak: text typed with the Dvorak keyboard layout instead of QWERTY -
kbshift: keyboard-row shift on multiple layouts (azerty, qwerty, dvorak, ...), parameterized with the layout and shift -
letter-indices: encodes consonants and/or vowels with their corresponding indices -
markdown: unidirectional encoding from Markdown to HTML -
ns3: ZyXEL NDMS V2 configuration password scrambling (aka NS3) -
soundex: Soundex phonetic codes (decoding gives English words with the same codes) -
telegraph: Chinese telegraph code, with the codebooks of Mainland China and Taiwan -
xx: XXencode, a UUencode variant with an alphanumeric alphabet (+,-, digits and letters) -
xy: binary written with two symbols,xandyby default (aka X-Y) -
yenc: Usenet binary-to-text encoding (raw, wrapped or framed with header, trailer and CRC32)
Steganography
-
hexagram: uses Base64 and encodes the result to a charset of I Ching hexagrams (as implemented here) -
klopf: aka Klopf code ; Polybius square with trivial alphabetical distribution -
resistor: aka resistor color codes -
rick: aka Rick cipher (in reference to Rick Astley's song "Never gonna give you up") -
sms: also called T9 code ; uses "-" as a separator for encoding, "-" or "_" or whitespace for decoding -
unicode-tags: aka ASCII smuggling ; hides ASCII text in invisible Unicode tag characters -
whitespace: replaces bits with whitespaces and tabs -
whitespace_after_before: variant ofwhitespace; 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") -
zero-width: hides text in invisible zero-width characters (binary, ternary and quinary variants, compatible with zwsp-steg)
Web
-
aaencode: JavaScript obfuscation with Japanese-style emoticons (encoding generates a program running the code) -
html: implements entities according to this reference -
jjencode: JavaScript obfuscation with only symbols (encoding generates a program running the code) -
jsfuck: JavaScript with only six characters ([]()!+) ; encoding generates an expression giving the text, or a program running the code withjsfuck-eval -
url: aka URL encoding
Metadata
Release files for codext 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| codext-2.0.1.tar.gz | 6.4 MB | With provenance | Details for codext-2.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| codext-2.0.1-py3-none-any.whl | Python 3 | none | any | Details for codext-2.0.1-py3-none-any.whl |
Total release size: 6.9 MB
Release files / codext-2.0.1.tar.gz
| Download URL | codext-2.0.1.tar.gz |
|---|---|
| Size | 6.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6e10ae3ec00a0d82a865b12d4af8b658a8b90daea587f3e6d414b9759b52e1e9
|
|
BLAKE2b-256 checksum How to use checksums |
d17531c4f4b43f2bb52e8f1d9f3ff88a7aa561c7284db31df973a2f158a24a85
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.
Transparency logRelease files / codext-2.0.1-py3-none-any.whl
| Download URL | codext-2.0.1-py3-none-any.whl |
|---|---|
| Size | 544.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ba402966e6673a4d3035f64e069a4a3556ea5abb95a12dd42e8ca5c359d3e26c
|
|
BLAKE2b-256 checksum How to use checksums |
9683704f66fe8d9f8a5c1e882388e25e82735b8d270f99b698335150a38b5a5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.
Transparency logSecurity for codext 2.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for codext-2.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.