Socket
Book a DemoInstallSign in
Socket

obfuscator-rb

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

obfuscator-rb

0.8.1
bundlerRubygems
Version published
Maintainers
1
Created
Source

Obfuscator

Gem Version

Русский | 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'

# Обфускация текста (режим :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 щюзёс."

# Обфускация чисел
obfuscator = Obfuscator::NumberObfuscator.new
obfuscator.obfuscate(123.45)     # => 567.89
obfuscator.obfuscate("1 234,56") # => "5 678,91"
obfuscator.obfuscate("192.168.1.1") # => "234.567.8.9"

# С настройками
obfuscator = Obfuscator::NumberObfuscator.new(
  preserve_leading_zeros: false,  # Не сохранять ведущие нули
  unsigned: true,                 # Убрать знаки минус
  seed: 12345                    # Для воспроизводимых результатов
)
obfuscator.obfuscate("0042")     # => "7391"
obfuscator.obfuscate("-123")     # => "456"

# Обфускация даты
obfuscator = Obfuscator::DateObfuscator.new
obfuscator.obfuscate('2024-03-15')                    # => "2025-08-23"

# Разные форматы дат
eu = Obfuscator::DateObfuscator.new(format: :eu)      # Европейский формат
eu.obfuscate('15.03.2024')                            # => "23.08.2025"

us = Obfuscator::DateObfuscator.new(format: :us)      # Американский формат
us.obfuscate('03/15/2024')                            # => "08/23/2025"

rus_short = Obfuscator::DateObfuscator.new(format: :rus_short) # Короткий формат
rus_short.obfuscate('15.03.24')                       # => "23.08.25"

# С ограничениями
constrained = Obfuscator::DateObfuscator.new(
  format: :rus,
  constraints: {
    min_year: 2020,              # Не генерировать даты раньше 2020
    max_year: 2025,              # Не генерировать даты позже 2025
    preserve_month: true,        # Сохранять месяц
    preserve_weekday: true       # Сохранять день недели
  }
)
constrained.obfuscate('15.03.2024')  # => "14.03.2025" (тот же месяц, тот же день недели)

# С сидом для воспроизводимых результатов
seeded = Obfuscator::DateObfuscator.new(format: :rus, seed: 12345)
seeded.obfuscate('15.03.2024')          # => "21.07.2025" (постоянный результат)

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

  • :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'

# Text obfuscation (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 щюзёс."

# Number obfuscation
obfuscator = Obfuscator::NumberObfuscator.new
obfuscator.obfuscate(123.45)     # => 567.89
obfuscator.obfuscate("1,234.56") # => "5,678.91"
obfuscator.obfuscate("192.168.1.1") # => "234.567.8.9"

# With configuration
obfuscator = Obfuscator::NumberObfuscator.new(
  preserve_leading_zeros: false,  # Don't keep leading zeros
  unsigned: true,                 # Remove minus signs
  seed: 12345                    # For reproducible results
)
obfuscator.obfuscate("0042")     # => "7391"
obfuscator.obfuscate("-123")     # => "456"

# Date obfuscation
obfuscator = Obfuscator::DateObfuscator.new
obfuscator.obfuscate('2024-03-15')                    # => "2025-08-23"

# Different date formats
eu = Obfuscator::DateObfuscator.new(format: :eu)      # European format
eu.obfuscate('15.03.2024')                            # => "23.08.2025"

us = Obfuscator::DateObfuscator.new(format: :us)      # US format
us.obfuscate('03/15/2024')                            # => "08/23/2025"

rus_short = Obfuscator::DateObfuscator.new(format: :rus_short) # Short format
rus_short.obfuscate('15.03.24')                       # => "23.08.25"

# With constraints
constrained = Obfuscator::DateObfuscator.new(
  format: :iso,
  constraints: {
    min_year: 2020,           # Don't generate dates before 2020
    max_year: 2025,           # Don't generate dates after 2025
    preserve_month: true,     # Keep the same month
    preserve_weekday: true    # Keep the same day of week
  }
)
constrained.obfuscate('2024-03-15')  # => "2025-03-14" (same month, same weekday)

# With seed for reproducible results
seeded = Obfuscator::DateObfuscator.new(seed: 12345)
seeded.obfuscate('2024-03-15')       # => "2025-07-21" (consistent output)

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
  # Handle invalid input types
  puts "Invalid input type: #{e.message}"
rescue Obfuscator::EncodingError => e
  # Handle encoding issues
  puts "Encoding error: #{e.message}"
rescue Obfuscator::Error => e
  # Handle other obfuscation errors
  puts "Obfuscation error: #{e.message}"
end

License

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

FAQs

Package last updated on 23 Feb 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.