我有一个加密函数,用于加密字符串作为文件名。 问题是,许多加密的字符串包含字符,不允许在文件名中的窗口像/或\ ...文件名加密(不含非法字符)
有什么办法可以加密文件名(或至少使它们不能直接读取由用户直到它们被程序解密)?
感谢
我有一个加密函数,用于加密字符串作为文件名。 问题是,许多加密的字符串包含字符,不允许在文件名中的窗口像/或\ ...文件名加密(不含非法字符)
有什么办法可以加密文件名(或至少使它们不能直接读取由用户直到它们被程序解密)?
感谢
假设文件名没有值(如果是的话,我想补充一点,数据文件的内容),我只想用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