C# 如何使用C验证文件是否为受密码保护的ZIP文件#
给定文件的路径,如何验证该文件是否为受密码保护的zip文件 i、 例如,我将如何实现此功能C# 如何使用C验证文件是否为受密码保护的ZIP文件#,c#,encryption,compression,zip,passwords,C#,Encryption,Compression,Zip,Passwords,给定文件的路径,如何验证该文件是否为受密码保护的zip文件 i、 例如,我将如何实现此功能 bool IsPasswordProtectedZipFile(string pathToFile) 我不需要解压这个文件——我只需要验证它是一个ZIP文件,并且已经用一些密码进行了保护 谢谢在.NET Framework成熟的这一点上,您需要使用第三方工具。有许多商业图书馆可以用谷歌搜索。我建议从微软的Codeplex网站上买一个免费的。首页声明“库支持zip密码”。使用以下代码可以工作。我所说的wo
bool IsPasswordProtectedZipFile(string pathToFile)
我不需要解压这个文件——我只需要验证它是一个ZIP文件,并且已经用一些密码进行了保护
谢谢在.NET Framework成熟的这一点上,您需要使用第三方工具。有许多商业图书馆可以用谷歌搜索。我建议从微软的Codeplex网站上买一个免费的。首页声明“库支持zip密码”。使用以下代码可以工作。我所说的works是指
entry.IsCrypted
根据zip文件中第一个条目是否有密码返回true或false
var file = @"c:\testfile.zip";
FileStream fileStreamIn = new FileStream(file, FileMode.Open, FileAccess.Read);
ZipInputStream zipInStream = new ZipInputStream(fileStreamIn);
ZipEntry entry = zipInStream.GetNextEntry();
Console.WriteLine("IsCrypted: " + entry.IsCrypted);
有一个关于在上使用SharpZipLib的简单教程
因此,一个简单的实现类似于:
public static bool IsPasswordProtectedZipFile(string path)
{
using (FileStream fileStreamIn = new FileStream(path, FileMode.Open, FileAccess.Read))
using (ZipInputStream zipInStream = new ZipInputStream(fileStreamIn))
{
ZipEntry entry = zipInStream.GetNextEntry();
return entry.IsCrypted;
}
}
注意,没有真正的错误处理或任何东西…在ZIP存档中,密码不是放在文件上,而是放在文件中的各个条目上。zip可以包含一些加密的条目,也可以包含一些未加密的条目。下面是一些示例代码,用于检查DotNetZip中条目的加密:
int encryptedEntries = 0;
using (var zip = ZipFile.Read(nameOfZipFile))
{
// check a specific, named entry:
if (zip["nameOfEntry.doc"].UsesEncryption)
Console.WriteLine("Entry 'nameOfEntry.doc' uses encryption");
// check all entries:
foreach (var e in zip)
{
if (e.UsesEncryption)
{
Console.WriteLine("Entry {0} uses encryption", e.FileName);
encryptedEntries++;
}
}
}
if (encryptedEntries > 0)
Console.WriteLine("That zip file uses encryption on {0} entrie(s)", encryptedEntries);
如果您愿意,可以使用LINQ:
private bool ZipUsesEncryption(string archiveToRead)
{
using (var zip = ZipFile.Read(archiveToRead))
{
var selection = from e in zip.Entries
where e.UsesEncryption
select e;
return selection.Count > 0;
}
}
没有100%正确的方法来检查所有zip条目是否加密。 zipfile中的每个条目都是独立的,可以有自己的密码/加密方法 在大多数情况下,zipfile由一些软件压缩,这些软件将确保zipfile中的每个条目都有一个通用密码和加密方法
因此,使用第一个ZipPentry(不是目录)检查zipfile是否加密可以覆盖大多数情况。谢谢-我现在意识到的关键点是,我需要查看ZIP中的各个条目,因为它们可以单独加密。密码不适用于整个ZIP文件。codeplex的DotNetZip也有类似的功能。是的,没错。因此,例如,您可能希望扫描整个归档文件,查找任何具有密码的条目,而不仅仅是第一个……谢谢。我也找到了这个DotNetZip解决方案-请参阅我在上面接受的答案中的评论。请参阅以下问题: