O

obfuscator

Ruby-гем для обфускации текста. Сохраняет структуру, заменяя содержимое бессмысленными словами, сохраняющими при этом естественный вид исходного текста. Поддерживает русский и английский языки.

Obfuscator

Gem Version

Русский | English

Русский

Ruby-гем для обфускации текста. Сохраняет структуру, заменяя содержимое бессмысленными словами, сохраняющими при этом естественный вид исходного текста. Поддерживает русский и английский языки.

Установка

Добавьте эту строку в Gemfile вашего приложения:

gem 'obfuscator-rb'

И выполните:

$ bundle install

Или установите самостоятельно:

$ gem install obfuscator-rb

Установка из репозитория hub.mos.ru:

$ gem install obfuscator-rb --source https://hub.mos.ru/ad/obfuscator.git

Код также доступен на GitHub и Gitverse.

Возможности

  • Сохраняет структуру текста (пунктуация, пробелы, регистр)
  • Сохраняет длину слов (если не включена натурализация)
  • Поддерживает несколько режимов обфускации
  • Опциональная натурализация текста по некоторым простым правилам
  • Необратимая трансформация текста
  • Детерминированный вывод при использовании сида
  • Полная поддержка UTF-8
  • Обеспечена обработка ошибок определённых типов данных

Использование

require 'obfuscator-rb'

# Базовое использование (режим :direct по умолчанию)
obfuscator = Obfuscator::Multilang.new
text = "Hello, Привет! This is a TEST текст."
result = obfuscator.obfuscate(text)
# => Каждое слово обфусцируется с использованием исходного алфавита
# => "Idise, Кющэшэ! Izib oq g MUGU дипяд."

# Смешанный режим с обоими алфавитами
obfuscator = Obfuscator::Multilang.new(mode: :mixed)
result = obfuscator.obfuscate(text)
# => Слова могут содержать и латинские, и кириллические символы
# => "Fаyef, Фeфeгю! Muci лi r HЫЛO ицижё."

# С натурализацией по простым правилам для более естественного вывода
obfuscator = Obfuscator::Multilang.new(mode: :mixed, naturalize: true)
result = obfuscator.obfuscate(text)
# => Вывод обрабатывается для более естественного вида
# => "Ohеsion, Wорыой! Наvы мe л ЛУНI yeзing."

# С сидом для воспроизводимых результатов
obfuscator = Obfuscator::Multilang.new(seed: 12345)
result = obfuscator.obfuscate(text)
# => Одинаковый ввод + одинаковый сид = одинаковый вывод
# => "Cumic, Фяцёне! Okac ub h POWO щюзёс."

Доступные режимы

  • :direct (по умолчанию) - сохраняет исходный язык для каждого слова
  • :eng_to_eng - только английский в английский
  • :rus_to_rus - только русский в русский
  • :swapped - английский в русский и наоборот
  • :mixed - использует оба алфавита (просто ради прикола)

Обработка входных данных

Обфускатор обрабатывает разлличные типы данных:

  • nil → возвращает nil
  • Числа → возвращаются без изменений
  • Объекты с методом to_s → обрабатываются нормально
  • Объекты без базовых методов Ruby → вызывают InputError
  • Неверные кодировки → вызывают EncodingError

Типы ошибок

  • Obfuscator::Error - Базовый класс ошибок гема
  • Obfuscator::InputError - Возникает при неверном типе входных данных
  • Obfuscator::EncodingError - Возникает при проблемах с кодировкой

Пример использования с обработкой ошибок


begin
  obfuscator.obfuscate(текст)
rescue Obfuscator::InputError => e
  # Обработка неверного типа входных данных
  puts "Неверный тип данных: #{e.message}"
rescue Obfuscator::EncodingError => e
  # Обработка проблем с кодировкой
  puts "Ошибка кодировки: #{e.message}"
rescue Obfuscator::Error => e
  # Обработка прочих ошибок обфускации
  puts "Ошибка обфускации: #{e.message}"
end

English

A Ruby gem for text obfuscation that preserves text structure while replacing content with meaningless but natural-looking words. Supports both English and Russian languages.

Installation

Add this line to your application's Gemfile:

gem 'obfuscator-rb'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install obfuscator-rb

Install from hub.mos.ru:

$ gem install obfuscator-rb --source https://hub.mos.ru/ad/obfuscator.git

The code is also available on GitHub and Gitverse.

Features

  • Preserves text structure (punctuation, spacing, capitalization)
  • Maintains word lengths (unless naturalization is enabled)
  • Supports multiple obfuscation modes
  • Optional text naturalization according to some basic rules
  • Irreversible transformation
  • Deterministic output with seeds
  • Full UTF-8 support
  • Comprehensive error handling with specific error types

Usage

require 'obfuscator-rb'

# Basic usage (default :direct mode)
obfuscator = Obfuscator::Multilang.new
text = "Hello, Привет! This is a TEST текст."
result = obfuscator.obfuscate(text)
# => Each word is obfuscated using its source alphabet
# => "Idise, Кющэшэ! Izib oq g MUGU дипяд."

# Mixed mode with both alphabets
obfuscator = Obfuscator::Multilang.new(mode: :mixed)
result = obfuscator.obfuscate(text)
# => Words may contain both Latin and Cyrillic characters
# => "Fаyef, Фeфeгю! Muci лi r HЫЛO ицижё."

# With basic naturalization for more natural-looking output
obfuscator = Obfuscator::Multilang.new(mode: :mixed, naturalize: true)
result = obfuscator.obfuscate(text)
# => Output is processed to look more natural
# => "Ohеsion, Wорыой! Наvы мe л ЛУНI yeзing."

# With seed for reproducible results
obfuscator = Obfuscator::Multilang.new(seed: 12345)
result = obfuscator.obfuscate(text)
# => Same input + same seed = same output
# => "Cumic, Фяцёне! Okac ub h POWO щюзёс."

Available Modes

  • :direct (default) - preserves source language for each word
  • :eng_to_eng - English to English only
  • :rus_to_rus - Russian to Russian only
  • :swapped - English to Russian and vice versa
  • :mixed - uses both alphabets (just for fun)

Input Handling

The obfuscator handles various input types:

  • nil → returns nil
  • Numbers → returns unchanged
  • Objects responding to to_s → processes normally
  • Objects without basic Ruby methods → raises InputError
  • Invalid encodings → raises EncodingError

Error Types

  • Obfuscator::Error - Base error class for the gem
  • Obfuscator::InputError - Raised for invalid input types
  • Obfuscator::EncodingError - Raised for encoding-related issues

Example Usage with Error Handling


begin
  obfuscator.obfuscate(text)
rescue Obfuscator::InputError => e
  # Handle invalid input types
  puts "Invalid input: #{e.message}"
rescue Obfuscator::EncodingError => e
  # Handle encoding issues
  puts "Encoding error: #{e.message}"
rescue Obfuscator::Error => e
  # Handle other obfuscation errors
  puts "Obfuscation failed: #{e.message}"
end

License

The gem is available as open source under the terms of the MIT License.