2012-03-23 50 views
1

什麼是將字符串轉換爲一串數字和/或字母,然後反向工程爲原始字符串的最快和最佳性能方式。類似於將字符串轉換爲哈希碼,但這是單向轉換。我需要一個雙向的方法。我正在創建一個簡單的URL短服務,我不想處理數據庫。C#最快的雙向字符串縮短

我認爲MD5通過私鑰進行加密/解密,但我想有另一種方式可能會更好地提高性能。

如果要加密/解密是要走的路,那麼哪個是處理器上最簡單的?

謝謝!

+5

谷歌「鴿巢原理」壓縮,找出原因未散列是不可行的(爲什麼你不能隨意和無損縮短通過其他手段字符串)。 – cHao 2012-03-23 23:19:14

+1

即使它起作用,您也可能只能通過相對較小的邊距來減少字符串的數量(遠不及常見的URL縮寫)。此外,MD5不是加密,也不使用任何私鑰或公鑰。除非你有一個奇蹟般的壓縮加密算法,否則加密一個URL很可能永遠不會給你一個比原始URL短得多的URL(如果有的話)。你應該使用一個數據庫。 :) – hangy 2012-03-23 23:25:15

回答

9

當你加密你不會縮短任何東西。密文的長度與明文大致相同。但是,如果使用加密散列,則會將字符串縮短爲散列長度。缺點是你不再能夠將哈希反轉回原始字符串。我不認爲你將能夠使用加密算法和加密散列函數來創建URL縮短器。如果這可以實現無限或至少非常高的信息壓縮。

5

你需要的是一種無損壓縮算法。我的意思是,這是您能夠壓縮文本並且能夠解壓縮的唯一方式。

隨着壓縮,字符串的長度會發生變化,當然。平均而言,長度不會像tinyurl使用的Base64 ID那麼小。他們能夠做到這一點,因爲他們將ID和URL存儲在數據庫中。

然而,這裏有一對夫婦選擇...

如果你走這條路線我想創建一個小控制檯應用程序測試所有這些的性能。如果你有內存,它甚至可以將結果緩存到一個字典中,這樣你就不必爲每個請求不斷地壓縮和解壓縮URL。

UPDATE

有一個叫smaz這顯然是專爲壓縮小弦庫...

它可以壓縮URLS相當不錯:

'http://google.com' 59壓縮%

'http://programming.reddit.com'壓縮了52%

http://github.com/antirez/smaz/tree/master」 46%

+0

Smaz看起來像很棒的圖書館。感謝指針。 – Echilon 2012-08-02 14:59:36