Как бы вы разработали ОО-классы для обработки криптосистем и их ключей? - PullRequest
0 голосов
/ 16 февраля 2009

Это более широкий вопрос, чем мой предыдущий , но связанный.

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

Что-то вроде Vigenere

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

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

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

1 Ответ

2 голосов
/ 16 февраля 2009

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

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

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

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

...