2009-02-16 71 views
0

這個問題比我的previous one更廣泛但相關。你會如何設計OO類來處理密碼系統及其密鑰

我想在Ruby中實現舊式的加密系統,如ADFGVX,VIC cipher等,主要是爲了好玩。這些密碼系統建立在更通用的系統之上,比如替代(像Caesar這樣的單一字母或像Vigenere這樣的多字母)和轉換(簡單,雙重)。我的問題是如何創建一個類的層次結構來處理密碼系統和密鑰。

喜歡的東西的V @ genere <換人< SimpleCipher或其他什麼東西?鑰匙怎麼樣?一些替代鍵在使用前會縮合(「ARABESQUE」變成「ARBESQU」),而大多數換位鍵不是這樣的。

現在,我有一個非常基本的design doc(我說基本)和我想想,我似乎無法找到這樣的令人滿意的方式,所以我來這裏是爲了你的智慧。

實施將是在Ruby,但除非設計必須使用多重繼承,它不是關於Ruby本身。在水銀

概念證明(尚未運行的,並可能是錯誤的)here的。

回答

2

想想類簽名。每一個加密算法都將有兩種方法,encrypt()decrypt(),你必須要考慮的塊和流密碼(即,許多算法要在固定大小的塊數據。)

一旦你低於這個水平,不過,這些方法看起來會有很大的不同,並且在這個級別上沒有太多的共享行爲。

所以我懷疑你想要的是更多的模塊或混入結構,而不是繼承的。僅僅因爲你有一個分類,它並不意味着分類應該是一個繼承層次。

在這類事情上有很多很好的討論;看看是否Ostrich < Bird。參見鳥類fly() ......除了鴕鳥。

+0

謝謝查理,我想我總是忘記混入。雖然這種情況下,我覺得有代碼可以共享,因爲這些舊系統的構建塊大部分是相同的(subst,transp,checkerboard等)。 – Keltia 2009-02-16 15:56:11