文件和文件夹加密的问题

harboursong 2005-03-01 11:14:34
要对文件和文件夹加密(不是对文件内容),各位兄弟姐妹哪位有相关的帮助文章发上来看看。
如果有小弟不胜感激。邮箱:harbour_song@hotmail.com 分还可以在加
...全文
112 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiezhi 2005-03-01
  • 打赏
  • 举报
回复
//功能描述: 提供加密和解密的方法
******************************************************************/
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace Common
{
/// <summary>
/// 加密和解密
/// </summary>
public sealed class EncryptDecrypt
{
private EncryptDecrypt(){}

//默认密钥向量
private static byte[] Keys = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};

/// <summary>
/// 利用MD5对字符串进行加密
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <returns>返回加密后的字符串</returns>
public static string EncryptMD5(string encryptString)
{
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
UTF8Encoding Encode = new UTF8Encoding();
byte[] HashedBytes = md5Hasher.ComputeHash(Encode.GetBytes(encryptString));
return Encode.GetString(HashedBytes);
}

/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString,string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0,8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream,dCSP.CreateEncryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
cStream.Write(inputByteArray,0,inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
}

/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptString,string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream,DCSP.CreateDecryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
cStream.Write(inputByteArray,0,inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return decryptString;
}
}

/// <summary>
/// DES加密文件
/// </summary>
/// <param name="inFilePath">待加密文件</param>
/// <param name="outFilePath">加密后的文件</param>
/// <param name="encryptKey">加密密钥</param>
/// <returns></returns>
public static bool EncryptDES(string inFilePath,string outFilePath,string encryptKey)
{
byte[] rgbIV= Keys;
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0,8));
//读入的流
FileStream inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
//待写的流
FileStream outFs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
outFs.SetLength(0);
//创建一个变量来帮助读写
byte[] byteIn = new byte[100]; //临时存放读入的流
long readLen = 0; //读入流的长度
long totalLen = inFs.Length; //总共读入流的长度
int everyLen; //每次读入流动长度
//读入InFs,加密后写入OutFs
DES des = new DESCryptoServiceProvider();
CryptoStream encStream = new CryptoStream(outFs, des.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
while(readLen < totalLen)
{
everyLen = inFs.Read(byteIn, 0, 100);
encStream.Write(byteIn, 0, everyLen);
readLen = readLen + everyLen;
}
encStream.Close();
outFs.Close();
inFs.Close();
return true;//加密成功
}
catch
{
return false;//加密失败
}
}


/// <summary>
/// DES解密文件
/// </summary>
/// <param name="inFilePath">待解密文件</param>
/// <param name="outFilePath">待加密文件</param>
/// <param name="decryptKey">解密密钥</param>
/// <returns></returns>
public static bool DecryptDES(string inFilePath,string outFilePath,string decryptKey)
{
byte[] rgbIV= Keys;
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0,8));
//读入的流
FileStream inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
//待写的流
FileStream outFs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
outFs.SetLength(0);
//创建一个变量来帮助读写
byte[] byteIn = new byte[100]; //临时存放读入的流
long readLen = 0; //读入流的长度
long totalLen = inFs.Length; //总共读入流的长度
int everyLen; //每次读入流动长度
//读入InFs,解密后写入OutFs
DES des = new DESCryptoServiceProvider();
CryptoStream encStream = new CryptoStream(outFs, des.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
while(readLen < totalLen)
{
everyLen = inFs.Read(byteIn, 0, 100);
encStream.Write(byteIn, 0, everyLen);
readLen = readLen + everyLen;
}
encStream.Close();
outFs.Close();
inFs.Close();
return true;//解密成功
}
catch
{
return false;//解密失败
}
}
}
}
harboursong 2005-03-01
  • 打赏
  • 举报
回复
最好是c#源码
jiezhi 2005-03-01
  • 打赏
  • 举报
回复
楼主:看清楚代码,后面两个方法是加密解密文件的。
james1219 2005-03-01
  • 打赏
  • 举报
回复
UP,谢谢JIEZHI和楼主,接分
harboursong 2005-03-01
  • 打赏
  • 举报
回复
我想应该可以直接加密文件吧????
harboursong 2005-03-01
  • 打赏
  • 举报
回复
这还是加密字符串的,我希望的是加密文件的,如果也是用加密字符串做请说一下思路。
是不是要吧正片文章加密后在改变一下文件类型啊???
1. 我忘记了密码,怎样才能恢复我的文件? 注册用户可以使用急救中心恢复数据(但只能恢复使用了“普通加密”的文件,即使是我们也无法恢复使用了“较高或最高加密强度”加密文件) 2. 加密文件夹内,"lockdir.exe"这个解密程序被删除了,我该怎样才能解密? 删除与否并不影响加密数据。只要复制"lockdir.exe"到该文件夹中,打开运行即可解开。如果找不到lockdir.exe这个文件,可以从我们网站上重新下载 3. 我能查看加密文件夹的属性,文件夹大小,文件夹数量吗? 不能。加密后,软件将自动隐藏文件夹的属性,大小及数据。这样能阻止别人猜测文件夹的内容,能更深层地保护文件。 4. 文件加密安全吗? 软件使用了高强度的加密算法,可以深度隐藏和加密文件。如果您要加密的只是普通文件,可以只隐藏锁定加密方式(速度极快)。如果您要加密的是十分机密的文件,强烈建议您使用“最高的加密强度”,它使用了256位BlowFish及AES加密算法,安全至上! 5. 隐藏锁定加密方式安全吗? 软件使用了三种方法加密文件,可以有效阻止入侵者(即使在内核模式,安全模式,DOS模式下仍是加密状态)。速度最快,但是如果您要加密的是十分机密的文件,强烈建议您使用“最高的加密强度”。 6. 加密文件能不受病毒,木马,蠕虫,间谍软件影响吗? 是的。除了使用正解的密码解密,没有其他办法能破坏加密数据。 7. 我电脑重启或者使用另一个系统时,文件夹是否仍是加密状态呢? 是的。加密后的文件夹在“安全模式”,“DOS模式”,或另一个系统下仍然是保持加密状态的。 8. 我是不是可以加密任意类型的文件? 是的。任何类型的文件都可以被正常加密。 9. 软件能运行在哪些类型的磁盘上呢?比如FAT16, FAT32, NTFS & EFS? 软件的加密算法适用于所有的磁盘类型,没有任何兼容性问题,支持FAT16 ,在FAT32 , NTFS等。 10. 软件能在 Vista/2003 Server/XP/2000/NT/Me/98 这些系统上正常使用吗? 是的。软件已经经过严格的测试,在这些系统下都能正常地运行。 11. 未注册版本有什么限制? 软件没有使用次数或使用日期限制,您可以无限期地使用本软件。未注册用户仅无法使用 最高级别的加密强度 。若您喜欢这款软件且希望能使用软件的所有功能,请购买注册。 14. 加密后,文件夹无法解密,找不到解密程序 这是因为您把高级设置中的选项"加密后自动复制解密程序到加密文件夹"的勾去掉了. 也可能是因为您无意中删除了解密程序. 解决办法:把加密器复制进那文件夹运行即可显示解密界面了.输入正确密码即可解开. 15. 加密后,文件夹里的内容隐藏了? 这是因为您把高级设置中的选项"加密后自动复制解密程序到加密文件夹"的勾去掉了. 也可能是因为您无意中删除了解密程序. 解决办法:把加密器复制进那文件夹运行即可显示解密界面了.输入正确密码即可解开. 16. 把加密文件夹 用WINRAR打包了,怎么解密? 这是错误操作! 加密后的文件夹是防复制,防读取,防删除的. 当然WINRAR程序也无法打包里面的资料. 打包后压缩文件通常只有300K左右. 压缩包里存放的不是加密数据,而只是一个加密解密的EXE程序. 若需要解密,请务必回到原文件夹内,运行里面的解密程序lockdir.exe解开。 17. 输入急救中心提示的密码,但密码错误? 急救中心是可以重设普通强度加密的密码的。但若您使用的是盗版注册码,您将无法正常恢复出密码。请使用正版注册码,新建一个windows帐户登录系统后重新注册。再使用急救中心重设密码。

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧