0

これは以前の質問よりも広い質問ですが、関連しています。

ADFGVXVIC cipherなどの旧式の暗号システムを Ruby で実装したいと考えています。これらの暗号システムは、置換 (Caesar などの単一アルファベットまたは Vigenere などの多アルファベット) や転置 (単純、二重) などのより一般的なシステムの上に構築されています。私の質問は、暗号システムとキーの両方を処理するクラスの階層をどのように作成するかということです。

Vigenere < Substitution < SimpleCipher のようなものですか? キーはどうですか?一部の置換キーは使用前に圧縮されます (「ARABESQUE」は「ARBESQUE」になります) が、ほとんどの移調キーはそうではありません。

現在、私は非常に基本的な設計ドキュメント( basicと言いました) を持っていますが、考えてみると、満足のいく方法を見つけることができないようです。

実装は Ruby で行いますが、設計で多重継承を使用する必要がない限り、それは Ruby 自体に関するものではありません。

ここMercurialでの概念実証(まだ実行可能ではなく、おそらく間違っている) 。

4

1 に答える 1

2

クラスの署名について考えてみてください。すべての暗号アルゴリズムには と の 2 つの方法がencrypt()ありdecrypt()、ブロック暗号とストリーミング暗号を考慮する必要があります (つまり、多くのアルゴリズムは固定サイズのブロックでデータを必要とします)。

ただし、そのレベルを下回ると、メソッドはかなり根本的に異なるように見え、そのレベルで共有される動作はそれほど多くありません。

したがって、あなたが望むのは、継承ではなく、モジュールまたは mixin 構造であると思われます。分類法があるからといって、分類法が継承階層であるべきだという意味ではありません。

この種のことについては、多くの良い議論があります。かどうかについての話を探してくださいOstrich < Bird。ほら、鳥fly()...ダチョウを除いて。

于 2009-02-16T15:35:42.693 に答える