2014-07-15 87 views
-8

我需要一種加密方法,它將加密(不編碼)文件名,以便將得到的加密字符串存儲在SQLite表中。加密文件名

加密方法不得在生成的TString(非ANSI)中插入#0字符。

實施例:

  • 之前:hello_world.txt
  • 後:y381a82jzseoi1

兩個字符串的長度需要是相同的,或至少不超過10-15%長在長度。

有什麼建議嗎?

+0

請考慮閱讀[this](http://en.wikipedia.org/wiki/Security_through_obscurity)維基百科文章。如果它不適用於你,然後簡單地忽略我的評論。 – mg30rg

回答

3

我會做這樣的:從文本

  1. 轉換使用TEncoding.GetBytes爲二進制。你需要決定編碼。爲了支持Unicode UTF-8或UTF-16將是最可能的選擇。通常UTF-8在空間方面效率最高。
  2. 使用您選擇的加密算法進行加密。這將由TEncoding.GetBytes返回的二進制數據轉換爲加密的二進制數據。
  3. 將加密的二進制數據以blob的形式保存到數據庫。

請注意,我已經避免將加密的二進制數據轉換回文本。這涉及到您希望通過簡單地側向解決問題來避免空終止符。您要認識到的關鍵是加密對二進制數據而不是文本進行操作。加密算法對文本進行操作是一個非常常見的誤解。

如果出於某種原因,我沒有預料到,您只需將數據存儲爲文本,那麼您應該將其編碼爲二進制文本。你可以實現base255編碼,以避免使用空終止符,並保持大小。