using ComPDFKit.PDFDocument;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EncryptTest
{
internal class EncryptTest
{
private static string outputPath =Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))) ?? string.Empty, "Output", "CS");
static private string userPassword = string.Empty;
static private string ownerPassword = string.Empty;
static void Main(string[] args)
{
#region Perparation work
Console.WriteLine("Running Encrypt test sample…\r\n");
SDKLicenseHelper.LicenseVerify();
if (!Directory.Exists(outputPath))
{
Directory.CreateDirectory(outputPath);
}
#endregion
#region Sample 1: Encrypt by user password
CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (EncryptByUserPassword(document))
{
Console.WriteLine("Encrypt by user password done.");
}
else
{
Console.WriteLine("Encrypt by user password failed.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 2: Encrypt by owner password
document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (EncryptByOwnerPassword(document))
{
Console.WriteLine("Encrypt by owner password done.");
}
else
{
Console.WriteLine("Encrypt by owner password failed.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 3: Encrypt by all passwords
document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (EncryptByAllPasswords(document))
{
Console.WriteLine("Encrypt by Both user and owner passwords done.");
}
else
{
Console.WriteLine("Encrypt by Both user and owner passwords failed.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 4: Unlock
document = CPDFDocument.InitWithFilePath("AllPasswords.pdf");
if (Unlock(document))
{
Console.WriteLine("Unlock done.");
}
else
{
Console.WriteLine("Unlock failed.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
#region Sample 5: Decrypt
document = CPDFDocument.InitWithFilePath("AllPasswords.pdf");
if (Decrypt(document))
{
Console.WriteLine("Decrypt done.");
}
else
{
Console.WriteLine("Decrypt failed.");
}
document.Release();
Console.WriteLine("--------------------");
#endregion
Console.WriteLine("Done!");
Console.WriteLine("--------------------");
Console.ReadLine();
}
static private bool EncryptUseRC4Algo(CPDFDocument document, CPDFPermissionsInfo permissionsInfo)
{
CPDFDocumentEncryptionLevel encryptionLevel = CPDFDocumentEncryptionLevel.CPDFDocumentEncryptionLevelRC4;
document.Encrypt(userPassword, ownerPassword, permissionsInfo, encryptionLevel);
string encryptPath = Path.Combine(outputPath, "EncryptUseRC4Test.pdf");
if (!document.WriteToFilePath(encryptPath))
{
return false;
}
CPDFDocument encryptedDoc = CPDFDocument.InitWithFilePath(encryptPath);
if (encryptedDoc.IsEncrypted)
{
Console.WriteLine("File is encrypted");
Console.WriteLine("Browse the changed file in: " + encryptPath);
Console.WriteLine("User password is: {0}", userPassword);
}
else
{
Console.WriteLine("File encrypt failed");
return false;
}
return true;
}
static private bool EncryptUseAES128Algo(CPDFDocument document, CPDFPermissionsInfo permissionsInfo)
{
CPDFDocumentEncryptionLevel encryptionLevel = CPDFDocumentEncryptionLevel.CPDFDocumentEncryptionLevelAES128;
document.Encrypt(userPassword, ownerPassword, permissionsInfo, encryptionLevel);
string encryptPath = Path.Combine(outputPath, "EncryptUseAES128Test.pdf");
if (!document.WriteToFilePath(encryptPath))
{
return false;
}
CPDFDocument encryptedDoc = CPDFDocument.InitWithFilePath(encryptPath);
if (encryptedDoc.IsEncrypted)
{
Console.WriteLine("File is encrypted");
Console.WriteLine("Browse the changed file in: " + encryptPath);
Console.WriteLine("User password is: {0}", userPassword);
}
else
{
Console.WriteLine("File encrypt failed");
return false;
}
return true;
}
static private bool EncryptUseAES256Algo(CPDFDocument document, CPDFPermissionsInfo permissionsInfo)
{
CPDFDocumentEncryptionLevel encryptionLevel = CPDFDocumentEncryptionLevel.CPDFDocumentEncryptionLevelAES256;
document.Encrypt(userPassword, ownerPassword, permissionsInfo, encryptionLevel);
string encryptPath = Path.Combine(outputPath, "EncryptUseAES256Test.pdf");
if (!document.WriteToFilePath(encryptPath))
{
return false;
}
CPDFDocument encryptedDoc = CPDFDocument.InitWithFilePath(encryptPath);
if (encryptedDoc.IsEncrypted)
{
Console.WriteLine("File is encrypted");
Console.WriteLine("Browse the changed file in " + encryptPath);
Console.WriteLine("User password is: {0}", userPassword);
}
else
{
Console.WriteLine("File encrypt failed");
return false;
}
return true;
}
static private bool EncryptUseNoEncryptAlgo(CPDFDocument document, CPDFPermissionsInfo permissionsInfo)
{
CPDFDocumentEncryptionLevel encryptionLevel = CPDFDocumentEncryptionLevel.CPDFDocumentEncryptionLevelNoEncryptAlgo;
document.Encrypt(userPassword, ownerPassword, permissionsInfo, encryptionLevel);
string encryptPath = Path.Combine(outputPath, "EncryptUseNoEncryptAlgoTest.pdf");
if (!document.WriteToFilePath(encryptPath))
{
return false;
}
CPDFDocument encryptedDoc = CPDFDocument.InitWithFilePath(encryptPath);
if (encryptedDoc.IsEncrypted)
{
Console.WriteLine("File is encrypted.");
Console.WriteLine("Browse the changed file in " + encryptPath);
Console.WriteLine("User password is: {0}", userPassword);
}
else
{
Console.WriteLine("File encrypt failed");
return false;
}
return true;
}
///
/// Using RC4, AES128, AES256, NoEncrypt algorithm to encrypt document.
/// User password: User
/// No owner password
///
/// Regular document
static private bool EncryptByUserPassword(CPDFDocument document)
{
bool result = true;
userPassword = "User";
ownerPassword = string.Empty;
CPDFPermissionsInfo permissionsInfo = new CPDFPermissionsInfo();
if (EncryptUseRC4Algo(document, permissionsInfo))
{
Console.WriteLine("RC4 encrypt done.\n");
}
else
{
Console.WriteLine("RC4 encrypt failed.\n");
result = false;
}
if (EncryptUseAES128Algo(document, permissionsInfo))
{
Console.WriteLine("AES128 encrypt done.\n");
}
else
{
Console.WriteLine("AES128 encrypt failed.\n");
result = false;
}
if (EncryptUseAES256Algo(document, permissionsInfo))
{
Console.WriteLine("AES256 encrypt done.\n");
}
else
{
Console.WriteLine("AES256 encrypt failed.\n");
result = false;
}
if (EncryptUseNoEncryptAlgo(document, permissionsInfo))
{
Console.WriteLine("NoEncryptAlgo encrypt done.\n");
}
else
{
Console.WriteLine("NoEncryptAlgo encrypt failed.\n");
result = false;
}
return result;
}
///
/// Encrypt by owner password
/// No user password
/// Owner password: Owner
///
/// Regular document
static private bool EncryptByOwnerPassword(CPDFDocument document)
{
userPassword = null;
ownerPassword = "Owner";
CPDFPermissionsInfo permissionsInfo = new CPDFPermissionsInfo();
permissionsInfo.AllowsPrinting = false;
permissionsInfo.AllowsCopying = false;
CPDFDocumentEncryptionLevel encryptionLevel = CPDFDocumentEncryptionLevel.CPDFDocumentEncryptionLevelRC4;
document.Encrypt(userPassword, ownerPassword, permissionsInfo, encryptionLevel);
string encryptPath = Path.Combine(outputPath, "EncryptByOwnerPasswordTest.pdf");
if (!document.WriteToFilePath(encryptPath))
{
return false;
}
CPDFDocument encryptedDoc = CPDFDocument.InitWithFilePath(encryptPath);
if (encryptedDoc.IsEncrypted)
{
Console.WriteLine("File is encrypted.");
Console.WriteLine("Browse the changed file in " + encryptPath);
Console.WriteLine("Owner password is: {0}", ownerPassword);
}
else
{
Console.WriteLine("File encrypt failed");
return false;
}
return true;
}
///
/// Encrypt by all passwords
/// User password: User
/// Owner password: Owner
///
/// Regular document
static private bool EncryptByAllPasswords(CPDFDocument document)
{
userPassword = "User";
ownerPassword = "Owner";
CPDFPermissionsInfo permissionsInfo = new CPDFPermissionsInfo();
permissionsInfo.AllowsPrinting = false;
permissionsInfo.AllowsCopying = false;
CPDFDocumentEncryptionLevel encryptionLevel = CPDFDocumentEncryptionLevel.CPDFDocumentEncryptionLevelRC4;
document.Encrypt(userPassword, ownerPassword, permissionsInfo, encryptionLevel);
string encryptPath = Path.Combine(outputPath, "EncryptByAllPasswordsTest.pdf");
if (!document.WriteToFilePath(encryptPath))
{
return false;
}
CPDFDocument encryptedDoc = CPDFDocument.InitWithFilePath(encryptPath);
if (encryptedDoc.IsEncrypted)
{
Console.WriteLine("File is encrypted.");
Console.WriteLine("Browse the changed file in " + encryptPath);
Console.WriteLine("User password is: {0}", userPassword);
Console.WriteLine("Owner password is: {0}", ownerPassword);
}
else
{
Console.WriteLine("File encrypt failed");
return false;
}
return true;
}
///
/// Print printing and copying permissions info.
///
/// Permissions info about a document
static private void PrintPermissionsInfo(CPDFPermissionsInfo permissionsInfo)
{
Console.Write("AllowsPrinting: ");
Console.Write(permissionsInfo.AllowsPrinting == true ? "Yes\n" : "No\n");
Console.Write("AllowsCopying: ");
Console.Write(permissionsInfo.AllowsCopying == true ? "Yes\n" : "No\n");
}
///
/// Unlock document
///
///
static private bool Unlock(CPDFDocument document)
{
userPassword = "User";
ownerPassword = "Owner";
//Check if document is locked
if (document.IsLocked)
{
Console.WriteLine("Document is locked");
}
PrintPermissionsInfo(document.GetPermissionsInfo());
Console.WriteLine("Unlock with owner password");
document.CheckOwnerPassword("123");
//Check permissions info.
PrintPermissionsInfo(document.GetPermissionsInfo());
return true;
}
///
/// Decrypted
///
///
static private bool Decrypt(CPDFDocument document)
{
userPassword = "User";
ownerPassword = "Owner";
string decryptPath = Path.Combine(outputPath, "DecryptTest.pdf");
document.UnlockWithPassword(userPassword);
if (!document.Decrypt(decryptPath))
{
return false;
}
CPDFDocument decryptDocument = CPDFDocument.InitWithFilePath(decryptPath);
if (decryptDocument.IsEncrypted)
{
return false;
}
else
{
Console.WriteLine("Document decrypt done.");
}
return true;
}
}
}