2012-07-09 35 views
2

我有一個加密函數,用於加密字符串作爲文件名。 問題是,許多加密的字符串包含字符,不允許在文件名中的窗口像/或\ ...文件名加密(不含非法字符)

有什麼辦法可以加密文件名(或至少使它們不能直接讀取由用戶直到它們被程序解密)?

感謝

+1

這聽起來像哈希會更好。你瞭解加密和哈希之間的區別嗎?兩者都是加密操作,但一個是可逆的,另一個不是。通過犧牲可逆性,您可以大幅減少輸出的大小,同時仍能從獨特輸出的散列保證中受益。 – Wug 2012-07-09 21:39:36

+0

你確定要加密文件名而不是文件內容嗎? – 2012-07-09 21:42:49

回答

8

假設文件名沒有值(如果是的話,我想補充一點,數據文件的內容),我只想用Path.GetRandomFileName並通過周圍。

[Path.GetRandomFileName]返回一個密碼強的隨機字符串,可以用作文件夾名稱或文件名。

+0

可以工作,謝謝 – user1071461 2012-07-09 21:44:35

5

我會做文件名意義,但不加密。這會讓你的生活更輕鬆。然後我會加密文件的內容

爲了讓你可以嘗試

  • Path.GetRandomFileName隨機名稱。它會返回一個名稱,但不會創建文件。

    輸出示例:atqsfpoj.rsh

  • Path.GetTempFileName。它在%TEMP%文件夾中創建一個唯一命名的零字節文件。

    輸出示例:C:\用戶\%USERNAME%\應用程序數據\本地的\ Temp \ tmp35AD.tmp

2

我想他所要求的是,只有返回字母的功能。我寫了一些類似的東西,但有一個圖書館:試試這個link

-1

這些答案都是一個好主意,但我應該在提問之前做了這個,但我沒有想到它。我將使用我認爲最適合我需求的解決方案。

這就是簡單地加密,將所述9個非法字符到短碼字,例如[ILL2]後,用與string.replace像這樣:

加密:

if (mystring.Contains("(i1)")) mystring = mystring.Replace("\\", "(i1)"); 
if (mystring.Contains("(i2)")) mystring = mystring.Replace("/", "(i2)"); 
if (mystring.Contains("(i3)")) mystring = mystring.Replace(":", "(i3)"); 
if (mystring.Contains("(i4)")) mystring = mystring.Replace("*", "(i4)"); 
if (mystring.Contains("(i5)")) mystring = mystring.Replace("?", "(i5)"); 
if (mystring.Contains("(i6)")) mystring = mystring.Replace("\"", "(i6)"); 
if (mystring.Contains("(i7)")) mystring = mystring.Replace("<", "(i7)"); 
if (mystring.Contains("(i8)")) mystring = mystring.Replace(">", "(i8)"); 
if (mystring.Contains("(i9)")) mystring = mystring.Replace("|", "(i9)"); 

解密:

if (myencryptedstring.Contains("(i1)")) myencryptedstring = myencryptedstring.Replace("(i1)", "\\"); 
if (myencryptedstring.Contains("(i2)")) myencryptedstring = myencryptedstring.Replace("(i2)", "/"); 
if (myencryptedstring.Contains("(i3)")) myencryptedstring = myencryptedstring.Replace("(i3)", ":"); 
if (myencryptedstring.Contains("(i4)")) myencryptedstring = myencryptedstring.Replace("(i4)", "*"); 
if (myencryptedstring.Contains("(i5)")) myencryptedstring = myencryptedstring.Replace("(i5)", "?"); 
if (myencryptedstring.Contains("(i6)")) myencryptedstring = myencryptedstring.Replace("(i6)", "\""); 
if (myencryptedstring.Contains("(i7)")) myencryptedstring = myencryptedstring.Replace("(i7)", "<"); 
if (myencryptedstring.Contains("(i8)")) myencryptedstring = myencryptedstring.Replace("(i8)", ">"); 
if (myencryptedstring.Contains("(i9)")) myencryptedstring = myencryptedstring.Replace("(i9)", "|"); 

並且在解密之前以相反的方式做相同的事情。

非常感謝你的回答,儘管