2008-12-16 93 views
14

Estoy creando un documento en PDF usando el código C# en mi proceso. Necesito proteger el docuemnt con alguna contraseña estándar como "123456" o algún número de cuenta. Necesito hacer esto sin cualquier dlls de referencia como escritor de pdf.PDF protegido con contraseña usando C#

Estoy generando el archivo PDF utilizando informes de SQL Reporting services.

¿Hay alguna manera más fácil.

Respuesta

21

Estoy creando un documento PDF utilizando el código C# en mi proceso

¿Está utilizando alguna biblioteca para crear este documento? El pdf specification (8.6MB) es bastante grande y todas las tareas que involucran la manipulación de PDF pueden ser difíciles sin usar una biblioteca de terceros. La protección de contraseña y el cifrado de sus archivos PDF con el itextsharp biblioteca de código libre y abierto es muy fácil:

using (Stream input = new FileStream("test.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) 
using (Stream output = new FileStream("test_encrypted.pdf", FileMode.Create, FileAccess.Write, FileShare.None)) 
{ 
    PdfReader reader = new PdfReader(input); 
    PdfEncryptor.Encrypt(reader, output, true, "secret", "secret", PdfWriter.ALLOW_PRINTING); 
} 
+4

Tenga en cuenta que itextsharp requiere una licencia para uso comercial, a menos que su código también se publique bajo la misma licencia que utiliza. Los precios solo están disponibles previa solicitud. – Spongeboy

+2

Además, tenga en cuenta que esta respuesta se escribió en 2008, momento en el que iTextSharp se publicó bajo la LGPL. Tras el lanzamiento de la versión 5.0.0 (diciembre de 2009, revisión SVN 108, cambio de licencia en la revisión 99), la licencia fue cambiada a AGPL, requiriendo que los proveedores de servicios de aplicaciones liberen el código fuente o adquieran una licencia comercial. La versión anterior (4.1.6; LGPL) se bifurca [aquí] (https://github.com/itextsharper/iTextSharp-4.1.6) y todavía tiene la funcionalidad anterior. –

+0

Es una pena que este cifrado sea demasiado fácil de romper. http://www.codeproject.com/Articles/31493/PDF-Security- Remover – Diego

1

Sería muy difícil hacer esto sin necesidad de utilizar una biblioteca PDF. Básicamente, necesitarás desarrollar esa biblioteca por ti mismo.

Con la ayuda de una biblioteca PDF todo es mucho más simple. Aquí está un ejemplo que muestra cómo un documento fácilmente se puede proteger mediante Docotic.Pdf library:

public static void protectWithPassword(string input, string output) 
{ 
    using (PdfDocument doc = new PdfDocument(input)) 
    { 
     // set owner password (a password required to change permissions) 
     doc.OwnerPassword = "pass"; 

     // set empty user password (this will allow anyone to 
     // view document without need to enter password) 
     doc.UserPassword = ""; 

     // setup encryption algorithm 
     doc.Encryption = PdfEncryptionAlgorithm.Aes128Bit; 

     // [optionally] setup permissions 
     doc.Permissions.CopyContents = false; 
     doc.Permissions.ExtractContents = false; 

     doc.Save(output); 
    } 
} 

responsabilidad: Yo trabajo para el proveedor de la biblioteca.

Cuestiones relacionadas