diff --git a/src/SharpCompress/Archives/AbstractArchive.cs b/src/SharpCompress/Archives/AbstractArchive.cs
index 712db4de1..01ed5b907 100644
--- a/src/SharpCompress/Archives/AbstractArchive.cs
+++ b/src/SharpCompress/Archives/AbstractArchive.cs
@@ -161,6 +161,11 @@ public IReader ExtractAllEntries()
///
public virtual bool IsSolid => false;
+ ///
+ /// Archive is ENCRYPTED (this means the Archive has password-protected files).
+ ///
+ public virtual bool IsEncrypted => false;
+
///
/// The archive can find all the parts of the archive needed to fully extract the archive. This forces the parsing of the entire archive.
///
diff --git a/src/SharpCompress/Archives/Rar/RarArchive.cs b/src/SharpCompress/Archives/Rar/RarArchive.cs
index b3689a9f5..9acfdccc5 100644
--- a/src/SharpCompress/Archives/Rar/RarArchive.cs
+++ b/src/SharpCompress/Archives/Rar/RarArchive.cs
@@ -84,6 +84,8 @@ protected override IReader CreateReaderForSolidExtraction()
public override bool IsSolid => Volumes.First().IsSolidArchive;
+ public override bool IsEncrypted => Entries.First(x => !x.IsDirectory).IsEncrypted;
+
public virtual int MinVersion => Volumes.First().MinVersion;
public virtual int MaxVersion => Volumes.First().MaxVersion;
diff --git a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs
index ea763409d..27d47d233 100644
--- a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs
+++ b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs
@@ -205,6 +205,8 @@ protected override IReader CreateReaderForSolidExtraction() =>
.GroupBy(x => x.FilePart.Folder)
.Any(folder => folder.Count() > 1);
+ public override bool IsEncrypted => Entries.First(x => !x.IsDirectory).IsEncrypted;
+
public override long TotalSize =>
_database?._packSizes.Aggregate(0L, (total, packSize) => total + packSize) ?? 0;
diff --git a/tests/SharpCompress.Test/Rar/RarArchiveTests.cs b/tests/SharpCompress.Test/Rar/RarArchiveTests.cs
index 1aca13ddc..991f18e59 100644
--- a/tests/SharpCompress.Test/Rar/RarArchiveTests.cs
+++ b/tests/SharpCompress.Test/Rar/RarArchiveTests.cs
@@ -633,4 +633,13 @@ public void Rar5_Encrypted_Iterate_Archive() =>
"Rar5.encrypted_filesOnly.rar",
"Failure jpg exe Empty ัะตัั.txt jpg\\test.jpg exe\\test.exe"
);
+
+ [Fact]
+ public void Rar_TestEncryptedDetection()
+ {
+ using var passwordProtectedFilesArchive = RarArchive.Open(
+ Path.Combine(TEST_ARCHIVES_PATH, "Rar.encrypted_filesOnly.rar")
+ );
+ Assert.True(passwordProtectedFilesArchive.IsEncrypted);
+ }
}
diff --git a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs
index 829195864..af21ff94e 100644
--- a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs
+++ b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs
@@ -224,6 +224,15 @@ public void SevenZipArchive_Tar_PathRead()
);
}
+ [Fact]
+ public void SevenZipArchive_TestEncryptedDetection()
+ {
+ using var passwordProtectedFilesArchive = SevenZipArchive.Open(
+ Path.Combine(TEST_ARCHIVES_PATH, "7Zip.encryptedFiles.7z")
+ );
+ Assert.True(passwordProtectedFilesArchive.IsEncrypted);
+ }
+
[Fact]
public void SevenZipArchive_TestSolidDetection()
{
diff --git a/tests/TestArchives/Archives/7Zip.encryptedFiles.7z b/tests/TestArchives/Archives/7Zip.encryptedFiles.7z
new file mode 100644
index 000000000..4c15bb2cf
Binary files /dev/null and b/tests/TestArchives/Archives/7Zip.encryptedFiles.7z differ