2012-07-09 34 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)", "|"); 

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

非常感谢你的回答,尽管