2009-02-16 2 views
0

Это более широкий вопрос, чем мой previous one, но связанный.Как бы вы разработали классы OO для обработки криптосистем и их ключей

Я хочу реализовать старую криптосистему в Ruby, такую ​​как ADFGVX, VIC cipher и другие, в основном для развлечения. Эти криптосистемы построены на основе более общих систем, таких как замещение (моноалфавитный, такой как Цезарь или полиалфавитный, как Vigenere) и транспозиция (простая, двойная). Мой вопрос в том, как создать иерархию классов для обработки криптосистем и ключей.

Нечто вроде Vigenere < Замена < SimpleCipher или что-то еще? Как насчет ключей? Некоторые клавиши замещения конденсируются перед использованием («ARABESQUE» становится «ARBESQU»), тогда как большинство ключей транспонирования нет и так далее.

Прямо сейчас, у меня есть очень простой design doc (я сказал основного) и, как я думаю об этом, я не могу найти удовлетворительный способ для этого, так что я пришел сюда для вашей мудрости.

Реализация будет в Ruby, но если дизайн не должен использовать множественное наследование, это не касается самого Ruby.

Подтверждение концепции (еще не выполнимо и возможно неправильно) here в Mercurial.

ответ

2

Подумайте о подписях класса. Каждый алгоритм шифрования будет иметь два метода, encrypt() и decrypt(), и вы должны рассмотреть блок и потоковые шифры (то есть, многие алгоритмы хотят данных в блоках фиксированного размера.)

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

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

Есть много хороших обсуждений по этому поводу; чтобы поговорить о том, Ostrich < Bird. Смотрите, Птицы fly() ... кроме Страусов.

+0

Спасибо, Чарли, я всегда забываю о миксинах. Хотя в этом случае у меня такое чувство, что существует код, потому что строительные блоки в основном одинаковы для этих старых систем (суб, транс, шахматные доски и т. Д.). – Keltia

+0

Yup, вполне может быть. Тогда вы можете подумать о том, нужен ли вам модуль, который предоставляет криптоалгоритмы и содержит или смешивает криптографические примитивы. Взгляните на язык Cryptol: http://galois.com/technology/communications_security/cryptol –

Смежные вопросы