Obfuscator

Русский | English
Русский
Ruby-гем для обфускации данных с сохранением их структуры и формата. Поддерживает:
- Текст на русском и английском языках
- Числа (включая IP-адреса и смешанный контент)
- Даты в различных форматах
- Воспроизводимые результаты через seed
Установка
Добавьте эту строку в 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.
Возможности
Обфускация чисел
- Сохраняет формат и структуру чисел (десятичные, тысячные разделители)
- Обрабатывает IP-подобные последовательности (например, "21.11.234.23")
- Поддерживает сохранение ведущих нулей (настраиваемо)
- Предоставляет режим для работы только с положительными числами
- Сохраняет точность десятичных дробей
- Обрабатывает смешанный контент с числами и текстом
- Поддерживает латинский и кириллический алфавиты
Обфускация дат
- Поддерживает множество форматов дат через пресеты (ISO, EU, US, русский)
- Сохраняет структуру и валидность формата
- Настраиваемые ограничения:
- Диапазон допустимых лет
- Сохранение месяца
- Сохранение дня недели
- Обрабатывает полный формат ISO с временной зоной
Общие возможности
- Детерминированный вывод с опциональным сидом
- Обфускация с сохранением формата
- Поддержка кодировки UTF-8
- Комплексная обработка ошибок
- Эффективное использование памяти
Многопоточность
Отдельные экземпляры обфускаторов не являются потокобезопасными. Для многопоточных операций:
- Создавайте отдельный экземпляр для каждого потока
- Не используйте один экземпляр в разных потоках
- Каждый экземпляр поддерживает свое собственное состояние RNG
Использование
require 'obfuscator-rb'
obfuscator = Obfuscator::Multilang.new
text = "Hello, Привет! This is a TEST текст."
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::Multilang.new(mode: :mixed)
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::Multilang.new(mode: :mixed, naturalize: true)
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::Multilang.new(seed: 12345)
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::NumberObfuscator.new
obfuscator.obfuscate(123.45)
obfuscator.obfuscate("1 234,56")
obfuscator.obfuscate("192.168.1.1")
obfuscator = Obfuscator::NumberObfuscator.new(
preserve_leading_zeros: false,
unsigned: true,
seed: 12345
)
obfuscator.obfuscate("0042")
obfuscator.obfuscate("-123")
obfuscator = Obfuscator::DateObfuscator.new
obfuscator.obfuscate('2024-03-15')
eu = Obfuscator::DateObfuscator.new(format: :eu)
eu.obfuscate('15.03.2024')
us = Obfuscator::DateObfuscator.new(format: :us)
us.obfuscate('03/15/2024')
rus_short = Obfuscator::DateObfuscator.new(format: :rus_short)
rus_short.obfuscate('15.03.24')
constrained = Obfuscator::DateObfuscator.new(
format: :rus,
constraints: {
min_year: 2020,
max_year: 2025,
preserve_month: true,
preserve_weekday: true
}
)
constrained.obfuscate('15.03.2024')
seeded = Obfuscator::DateObfuscator.new(format: :rus, seed: 12345)
seeded.obfuscate('15.03.2024')
Доступные режимы
:direct
(по умолчанию) - сохраняет исходный язык для каждого слова
:eng_to_eng
- только английский в английский
:rus_to_rus
- только русский в русский
:swapped
- английский в русский и наоборот
:mixed
- использует оба алфавита
Доступные пресеты для даты
:eu
=> '%d.%m.%Y'
- европейский формат (31.12.2023)
:eu_short
=> '%d.%m.%y'
- короткий европейский формат (31.12.23)
:rus
=> '%d.%m.%Y'
- русский формат (31.12.2023)
:rus_short
=> '%d.%m.%y'
- короткий русский формат (31.12.23)
:iso
=> '%Y-%m-%d'
- формат ISO (2023-12-31)
:us
=> '%m/%d/%Y'
- американский формат (12/31/2023)
:us_short
=> '%m/%d/%y'
- короткий американский формат (12/31/23)
:iso_full
=> '%Y-%m-%dT%H:%M:%S%z'
- полный формат ISO (2023-12-31T00:00:00+00:00)
Обработка ошибок
begin
obfuscator.obfuscate(text)
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 data obfuscation that preserves structure and format. Supports:
- Text in both English and Russian
- Numbers (including IP addresses and mixed content)
- Dates in various formats
- Reproducible results via seeding
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
Number Obfuscation
- Preserves number format and structure (decimals, thousand separators)
- Handles IP-like sequences (e.g., "21.11.234.23")
- Supports leading zeros preservation (configurable)
- Provides unsigned mode for positive-only output
- Maintains consistent decimal precision
- Processes mixed content with numbers and text
- Supports both Latin and Cyrillic alphabets
Date Obfuscation
- Supports multiple date formats through presets (ISO, EU, US, Russian)
- Preserves format structure and validity
- Configurable constraints:
- Year range limits
- Month preservation
- Weekday preservation
- Handles full ISO datetime format with timezone
General Features
- Deterministic output with optional seeding
- Format-preserving obfuscation
- UTF-8 encoding support
- Comprehensive error handling
- Memory-efficient processing
Thread Safety
Individual obfuscator instances are NOT thread-safe. For concurrent operations:
- Create separate instances per thread
- Do not share instances across threads
- Each instance maintains its own RNG state
Usage
require 'obfuscator-rb'
obfuscator = Obfuscator::Multilang.new
text = "Hello, Привет! This is a TEST текст."
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::Multilang.new(mode: :mixed)
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::Multilang.new(mode: :mixed, naturalize: true)
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::Multilang.new(seed: 12345)
result = obfuscator.obfuscate(text)
obfuscator = Obfuscator::NumberObfuscator.new
obfuscator.obfuscate(123.45)
obfuscator.obfuscate("1,234.56")
obfuscator.obfuscate("192.168.1.1")
obfuscator = Obfuscator::NumberObfuscator.new(
preserve_leading_zeros: false,
unsigned: true,
seed: 12345
)
obfuscator.obfuscate("0042")
obfuscator.obfuscate("-123")
obfuscator = Obfuscator::DateObfuscator.new
obfuscator.obfuscate('2024-03-15')
eu = Obfuscator::DateObfuscator.new(format: :eu)
eu.obfuscate('15.03.2024')
us = Obfuscator::DateObfuscator.new(format: :us)
us.obfuscate('03/15/2024')
rus_short = Obfuscator::DateObfuscator.new(format: :rus_short)
rus_short.obfuscate('15.03.24')
constrained = Obfuscator::DateObfuscator.new(
format: :iso,
constraints: {
min_year: 2020,
max_year: 2025,
preserve_month: true,
preserve_weekday: true
}
)
constrained.obfuscate('2024-03-15')
seeded = Obfuscator::DateObfuscator.new(seed: 12345)
seeded.obfuscate('2024-03-15')
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
Available Date Presets
:eu
=> '%d.%m.%Y'
- European format (31.12.2023)
:eu_short
=> '%d.%m.%y'
- Short European format (31.12.23)
:rus
=> '%d.%m.%Y'
- Russian format (31.12.2023)
:rus_short
=> '%d.%m.%y'
- Short Russian format (31.12.23)
:iso
=> '%Y-%m-%d'
- ISO format (2023-12-31)
:us
=> '%m/%d/%Y'
- US format (12/31/2023)
:us_short
=> '%m/%d/%y'
- Short US format (12/31/23)
:iso_full
=> '%Y-%m-%dT%H:%M:%S%z'
- Full ISO format (2023-12-31T00:00:00+00:00)
Error Handling
begin
obfuscator.obfuscate(text)
rescue Obfuscator::InputError => e
puts "Invalid input type: #{e.message}"
rescue Obfuscator::EncodingError => e
puts "Encoding error: #{e.message}"
rescue Obfuscator::Error => e
puts "Obfuscation error: #{e.message}"
end
License
The gem is available as open source under the terms of the MIT License.