Как установить модуль для python в dcoder
Перейти к содержимому

Как установить модуль для python в dcoder

  • автор:

Модуль codecs в Python, реестр кодеков

Модуль codecs определяет базовые классы для стандартных кодеков Python (кодировщик и декодировщик) и предоставляет доступ к внутреннему реестру кодеков Python, который управляет процессом поиска кодека и обработки ошибок.

Большинство стандартных кодеков — это текстовые кодировки, которые кодируют текст в байты, но есть также кодеки, которые кодируют текст в текст и байты в байты. В Python уже имеется большое количество стандартных кодеков и маловероятно, что приложению потребуется определять собственный кодировщик или декодировщик. Но иногда необходимо сделать свой кодек, для этих целей модуль codecs , предоставляет несколько базовых классов, чтобы упростить процесс.

Допустим надо сделать кодек, который будет инвертировать заглавные буквы в строчные, а строчные — в заглавные. Можно пойти простым путем и определить функцию кодирования, которая будет выполнять это преобразование для входной строки

import string def invert(text): """Возвращает новую строку с преобразованными заглавными буквами в строчные, а строчные - в заглавные """ return ''.join( c.upper() if c in string.ascii_lowercase else c.lower() if c in string.ascii_uppercase else c for c in text ) >>> invert('Hello World') 'hELLO wORLD' >>> invert('hELLO wORLD') 'Hello World' 

Такая реализация неэффективна, особенно для очень больших текстовых строк. Модуль codecs включает в себя некоторые вспомогательные функции для создания кодеков, основанных на карте символов. Карта символов состоит из двух словарей. Карта преобразует символьные значения из входной строки в байтовые значения на выходе, а карта декодирования — в обратном направлении. Сначала создадим карту декодирования, а затем с помощью функции make_encoding_map() преобразуйте ее в карту кодирования.

# encoding_decoding_map.py import codecs import string # сопоставить символы самим себе decoding_map = codecs.make_identity_dict(range(256)) # список пар порядковых номеров соответствий # строчной букв - заглавной pairs = list(zip( [ord(c) for c in string.ascii_lowercase], [ord(c) for c in string.ascii_uppercase], )) # теперь изменим карту 'decoding_map' так чтобы номера # строчных букв соответствовали заглавной и наоборот decoding_map.update( upper: lower for (lower, upper) in pairs >) decoding_map.update( lower: upper for (lower, upper) in pairs >) # Создадим отдельную карту кодирования encoding_map = codecs.make_encoding_map(decoding_map) >>> codecs.charmap_encode('Hello World', 'strict', encoding_map) # (b'hELLO wORLD', 11) >>> codecs.charmap_encode(b'hELLO wORLD', 'strict', decoding_map) ('Hello World', 11) 

В данном случае карты кодирования и декодирования символов одинаковы, это может быть не всегда так. Функция make_encoding_map() обнаруживает ситуации, когда более одного входного символа кодируется в один и тот же выходной байт и заменяет значение кодирования на None , чтобы пометить кодировку как неопределенную.

Созданные карты символов кодирования и декодирования поддерживают все стандартные обработчики ошибок, поэтому для соответствия этой части API не требуется никакой дополнительной работы.

Для создания полноценного кодека необходимо установить несколько дополнительных классов и зарегистрировать кодировщик и декодировщик. Функция codecs.register() добавляет функцию поиска в реестр кодеков, чтобы ее можно было найти. Функция поиска должна принимать один строковый аргумент с именем кодировки и возвращать объект codecs.CodecInfo() , если кодировка найдена или None если нет.

Экземпляр CodecInfo , возвращаемый функцией поиска, сообщает кодекам, как кодировать и декодировать, используя все различные поддерживаемые механизмы: кодирование и декодирование без сохранения состояния, инкрементное кодирование и декодирование и потоковое кодирование и декодирование.

from encoding_decoding_map import encoding_map, decoding_map import codecs class InvertCodec(codecs.Codec): "кодирование/декодирование без сохранения состояния" def encode(self, input, errors='strict'): return codecs.charmap_encode(input, errors, encoding_map) def decode(self, input, errors='strict'): return codecs.charmap_decode(input, errors, decoding_map) class InvertIncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): data, nbytes = codecs.charmap_encode(input, self.errors, encoding_map) return data class InvertIncrementalDecoder(codecs.IncrementalDecoder): def decode(self, input, final=False): data, nbytes = codecs.charmap_decode(input, self.errors, decoding_map) return data class InvertStreamReader(InvertCodec, codecs.StreamReader): pass class InvertStreamWriter(InvertCodec, codecs.StreamWriter): pass def find_invert(encoding): """Return the codec for 'invert'. """ if encoding == 'invert': return codecs.CodecInfo( name='invert', encode=InvertCodec().encode, decode=InvertCodec().decode, incrementalencoder=InvertIncrementalEncoder, incrementaldecoder=InvertIncrementalDecoder, streamreader=InvertStreamReader, streamwriter=InvertStreamWriter, ) return None codecs.register(find_invert) 

Для кодирования/декодирования без сохранения состояния переопределяем Codec.encode() и Codec.decode() с новой реализацией, вызывая функции charmap_encode() и charmap_decode() соответственно. Каждый метод должен возвращать кортеж, содержащий преобразованные данные и количество использованных входных байтов или символов.

IncrementalEncoder и IncrementalDecoder служат в качестве базовых классов для дополнительных интерфейсов. Методы encode() и decode() инкрементных классов определены таким образом, что они возвращают только фактические преобразованные данные. Любая информация о буферизации сохраняется как внутреннее состояние. Созданный кодек invert не требует буферизации данных, т.к. использует взаимно однозначное отображение.

StreamReader и StreamWriter также нуждаются в методах encode() и decode () т. к. они должны возвращать то же значение, что и версия из кодека, для реализации может использоваться множественное наследование.

# Stateless encoder/decoder encoder = codecs.getencoder('invert') text = 'Hello Word' encoded_text, consumed = encoder(text) print('Encoded "<>" to "<>", consuming <> characters'.format( text, encoded_text, consumed)) # Stream writer import io buffer = io.BytesIO() writer = codecs.getwriter('invert')(buffer) print('StreamWriter for io buffer: ') print(' writing "abcDEF"') writer.write('abcDEF') print(' buffer contents: ', buffer.getvalue()) # Incremental decoder decoder_factory = codecs.getincrementaldecoder('invert') decoder = decoder_factory() decoded_text_parts = [] for c in encoded_text: decoded_text_parts.append( decoder.decode(bytes([c]), final=False) ) decoded_text_parts.append(decoder.decode(b'', final=True)) decoded_text = ''.join(decoded_text_parts) print('IncrementalDecoder converted  to '.format( encoded_text, decoded_text)) # Encoded "Hello Word" to "b'hELLO wORLD'", consuming 6 characters # StreamWriter for io buffer: # writing "Hello Word" # buffer contents: b'hELLO wORLD' # IncrementalDecoder converted b'hELLO wORLD' to 'Hello Word' 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Функции для кодирования и декодирования с любой кодировкой
  • Просмотр информации о кодировке
  • Дополнительные функции поиска кодировки
  • Регистрация и отмена регистрации функции поиска кодеков
  • Обработчики ошибок кодировки
  • Регистрация нового обработчика ошибок
  • Интерфейс базового класса Codec модуля codecs
  • Интерфейсы IncrementalEncoder() и IncrementalDecoder()
  • Потоковое кодирование и декодирование

decoder 0.5

A simple script to try and decode a string in various encoding mechanisms regardless of it’s (original) type.

Навигация

Ссылки проекта

Статистика

Метаданные

Лицензия: MIT

Сопровождающие

Описание проекта

Decoder

A simple script to try and decode a string in various encoding mechanisms regardless of it’s (original) type.

The one-liner doesn’t make much sense right? Don’t worry, I gotcha!

Let’s say you’ve a string (you obtained from somewhere, maybe a boot2root machine, ctf, etc.), you know it’s encoded (isn’t a hash and is not encrypted) but just can’t figure out the encoding mechanism used? No worries, this script will try and decode it in most used encoding mechanisms (i.e. base64, rot47, atbash, etc.)

Once the results come back, make sure to go through each and every line! That’s all manual :3

The script for now only supports:

Tested On (OS & Python version)

  • Ubuntu 20.04 LTS — Python 3.8.5
  • Arch Linux — Python 3.9.2

Downloading & Installation

        Decoding a string from directly from argument:
decoder -s Decoding a string from a file:
decoder -f rot47-encoded.txt

Todos

  • Add Colors
  • Utilize internal libraries to add all the decoding (rather than custom written code)

Filing Bugs/Contribution

Feel free to file a issue or create a PR for that issue if you come across any.

Screenshots

Contributors

  • @thehackersbrain — #2 — Coloring output and refactoring whole code base!

Credits

  • Big thanks to autodecoder (was a lot of help while writing this)
  • Thanks to @thehackersbrain’s Blogger machine which made me write this
Well this is shit work, any other tools which have the same functionality and actually work? Yes!
  • https://github.com/oreosES/autodecoder
  • https://github.com/Ciphey/Ciphey

Can’t figure out how to install Python package decoder.py

This package doesn’t provide any downloadable source code on PyPI.

You can download it from http://www.brailleweb.com/cgi-bin/python.py (this link was provided by authors on pypi, proceed with caution).

answered Jan 7, 2017 at 17:25
15.8k 6 6 gold badges 27 27 silver badges 46 46 bronze badges

Author of decoder.py here. 😀

I am sorry for inconvenience. pip was able to grab decoder.py from brailleweb.com before. It was unable to install it though because I didn’t provide a setup script. I didn’t do it primarily because people might like to choose which external decoders they would like to use and perhaps don’t want to install them into their’s Python site-packages directory on Windows. So I settled for manual installation instead. You aren’t first who complained about it and that’s why next version will have the setup script at least.

The new version is coming out soon. I am sorry to say development is slower than I anticipated but new version will be ready sooner or later. 😀

dcoder 0.2.1

A module that can decode/encode text in various ciphers.

Навигация

Ссылки проекта

Статистика

Метаданные

Лицензия: MIT License (MIT)

Автор: Swas.py

Метки decoder, encoder, ciphers

Сопровождающие

Классификаторы

Описание проекта

dcoder 0.2.1

dcoder is a python module that provides various functions for decoding/encoding text. It also has functions for encrypting or decrypting text in various ciphers.

Installation

You can install released versions of dcoder from the Python Package Index with pip or a similar tool:

Stable Release: pip install dcoder
Working Version: pip install git+https://github.com/CodeWithSwastik/dcoder.git

Usage:

Functions available:

The current list of functions available are:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *