我有一個加密函數,用於加密字符串作爲文件名。 問題是,許多加密的字符串包含字符,不允許在文件名中的窗口像/或\ ...文件名加密(不含非法字符)
有什麼辦法可以加密文件名(或至少使它們不能直接讀取由用戶直到它們被程序解密)?
感謝
我有一個加密函數,用於加密字符串作爲文件名。 問題是,許多加密的字符串包含字符,不允許在文件名中的窗口像/或\ ...文件名加密(不含非法字符)
有什麼辦法可以加密文件名(或至少使它們不能直接讀取由用戶直到它們被程序解密)?
感謝
假設文件名沒有值(如果是的話,我想補充一點,數據文件的內容),我只想用Path.GetRandomFileName並通過周圍。
[Path.GetRandomFileName]返回一個密碼強的隨機字符串,可以用作文件夾名稱或文件名。
可以工作,謝謝 – user1071461 2012-07-09 21:44:35
我會做文件名意義,但不加密。這會讓你的生活更輕鬆。然後我會加密文件的內容。
爲了讓你可以嘗試
Path.GetRandomFileName
隨機名稱。它會返回一個名稱,但不會創建文件。
輸出示例:atqsfpoj.rsh
Path.GetTempFileName
。它在%TEMP%文件夾中創建一個唯一命名的零字節文件。
輸出示例:C:\用戶\%USERNAME%\應用程序數據\本地的\ Temp \ tmp35AD.tmp
我想他所要求的是,只有返回字母的功能。我寫了一些類似的東西,但有一個圖書館:試試這個link
這些答案都是一個好主意,但我應該在提問之前做了這個,但我沒有想到它。我將使用我認爲最適合我需求的解決方案。
這就是簡單地加密,將所述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)", "|");
並且在解密之前以相反的方式做相同的事情。
非常感謝你的回答,儘管
這聽起來像哈希會更好。你瞭解加密和哈希之間的區別嗎?兩者都是加密操作,但一個是可逆的,另一個不是。通過犧牲可逆性,您可以大幅減少輸出的大小,同時仍能從獨特輸出的散列保證中受益。 – Wug 2012-07-09 21:39:36
你確定要加密文件名而不是文件內容嗎? – 2012-07-09 21:42:49