itextpdf 加密解密

itextpdf 加密解密itextpdf加密解密

大家好,又见面了,我是你们的朋友全栈君。


itextpdf 加密解密

                

                       

**************

相关类与接口

        

PdfWriter

public class PdfWriter extends PdfOutputStream {
    private static final byte[] obj = ByteUtils.getIsoBytes(" obj\n");
    private static final byte[] endobj = ByteUtils.getIsoBytes("\nendobj\n");
    protected WriterProperties properties;
    PdfObjectStream objectStream;
    private Map<PdfIndirectReference, PdfIndirectReference> copiedObjects;
    private SmartModePdfObjectsSerializer smartModeSerializer;
    protected boolean isUserWarnedAboutAcroFormCopying;

********
构造方法

    public PdfWriter(File file) throws FileNotFoundException {
    public PdfWriter(OutputStream os) {
    public PdfWriter(OutputStream os, WriterProperties properties) {
    public PdfWriter(String filename) throws FileNotFoundException {
    public PdfWriter(String filename, WriterProperties properties) throws FileNotFoundException {

********
其他方法

    public PdfWriter setSmartMode(boolean smartMode) {
    public PdfWriter setCompressionLevel(int compressionLevel) {

    public boolean isFullCompression() {
    public int getCompressionLevel() {

    PdfObjectStream getObjectStream() {
    void flushCopiedObjects(long docId) {

    protected void initCryptoIfSpecified(PdfVersion version) {
    protected void flushObject(PdfObject pdfObject, boolean canBeInObjStm) {
    protected PdfObject copyObject(PdfObject obj, PdfDocument documentTo, boolean allowDuplicating) {
    protected void writeToBody(PdfObject pdfObj) {
    protected void writeHeader() {
    protected void flushWaitingObjects(Set<PdfIndirectReference> forbiddenToFlush) {
    protected void flushModifiedWaitingObjects(Set<PdfIndirectReference> forbiddenToFlush) {

    private void markArrayContentToFlush(PdfArray array) {
    private void markDictionaryContentToFlush(PdfDictionary dictionary) {
    private void markObjectToFlush(PdfObject pdfObject) {
    private static boolean checkTypeOfPdfDictionary(PdfObject dictionary, PdfName expectedType) {

              

WriterProperties

public class WriterProperties {
    protected int compressionLevel = -1;
    protected Boolean isFullCompression = null;
    protected boolean smartMode = false;
    protected boolean addXmpMetadata;
    protected boolean addUAXmpMetadata = false;
    protected PdfVersion pdfVersion;
    protected EncryptionProperties encryptionProperties = new EncryptionProperties();
    protected PdfString initialDocumentId;
    protected PdfString modifiedDocumentId;


********
构造方法

    public WriterProperties() {
    }


********
其他方法

    public WriterProperties useSmartMode() {
    public WriterProperties addXmpMetadata() {
    public WriterProperties addUAXmpMetadata() {

    public WriterProperties setPdfVersion(PdfVersion version) {
    public WriterProperties setCompressionLevel(int compressionLevel) {
    public WriterProperties setInitialDocumentId(PdfString initialDocumentId) {
    public WriterProperties setModifiedDocumentId(PdfString modifiedDocumentId) {
    public WriterProperties setFullCompressionMode(boolean fullCompressionMode) {
    public WriterProperties setPublicKeyEncryption(Certificate[] certs, int[] permissions, int encryptionAlgorithm) {
    public WriterProperties setStandardEncryption(byte[] userPassword, byte[] ownerPassword, int permissions, int encryptionAlgorithm) {

    boolean isStandardEncryptionUsed() {
    boolean isPublicKeyEncryptionUsed() {

              

EncryptionConstants

public final class EncryptionConstants {
    public static final int STANDARD_ENCRYPTION_40 = 0;
    public static final int STANDARD_ENCRYPTION_128 = 1;
    public static final int ENCRYPTION_AES_128 = 2;
    public static final int ENCRYPTION_AES_256 = 3;
    public static final int DO_NOT_ENCRYPT_METADATA = 8;
    public static final int EMBEDDED_FILES_ONLY = 24;
    public static final int ALLOW_PRINTING = 2052;
    public static final int ALLOW_MODIFY_CONTENTS = 8;
    public static final int ALLOW_COPY = 16;
    public static final int ALLOW_MODIFY_ANNOTATIONS = 32;
    public static final int ALLOW_FILL_IN = 256;
    public static final int ALLOW_SCREENREADERS = 512;
    public static final int ALLOW_ASSEMBLY = 1024;
    public static final int ALLOW_DEGRADED_PRINTING = 4;
    static final int ENCRYPTION_MASK = 7;

    private EncryptionConstants() {
    }
}

                      

                        

PdfReader

public class PdfReader implements Closeable {
    public static final PdfReader.StrictnessLevel DEFAULT_STRICTNESS_LEVEL;
    private static final String endstream1 = "endstream";
    private static final String endstream2 = "\nendstream";
    private static final String endstream3 = "\r\nendstream";
    private static final String endstream4 = "\rendstream";
    private static final byte[] endstream;
    private static final byte[] endobj;
    protected static boolean correctStreamLength;
    private boolean unethicalReading;
    private boolean memorySavingMode;
    private PdfReader.StrictnessLevel strictnessLevel;
    private PdfIndirectReference currentIndirectReference;
    protected PdfTokenizer tokens;
    protected PdfEncryption decrypt;
    protected PdfVersion headerPdfVersion;
    protected long lastXref;
    protected long eofPos;
    protected PdfDictionary trailer;
    protected PdfDocument pdfDocument;
    protected PdfAConformanceLevel pdfAConformanceLevel;
    protected ReaderProperties properties;
    protected boolean encrypted;
    protected boolean rebuiltXref;
    protected boolean hybridXref;
    protected boolean fixedXref;
    protected boolean xrefStm;

*********
构造方法

    public PdfReader(InputStream is) throws IOException {
    public PdfReader(InputStream is, ReaderProperties properties) throws IOException {

    public PdfReader(File file) throws FileNotFoundException, IOException {
    public PdfReader(String filename) throws IOException {
    public PdfReader(String filename, ReaderProperties properties) throws IOException {

    public PdfReader(IRandomAccessSource byteSource, ReaderProperties properties) throws IOException {
    PdfReader(IRandomAccessSource byteSource, ReaderProperties properties, boolean closeStream) throws IOException {


*********
其他方法

    public byte[] computeUserPassword() {  //计算用户密码

    public void close() throws IOException {
    public void setCloseStream(boolean closeStream) {
    public PdfReader.StrictnessLevel getStrictnessLevel() {
    public PdfReader setMemorySavingMode(boolean memorySavingMode) {
    public PdfReader setUnethicalReading(boolean unethicalReading) {
    public PdfReader setStrictnessLevel(PdfReader.StrictnessLevel strictnessLevel) {


    public long getLastXref() {
    public int getCryptoMode() {
    public long getFileLength() {
    public long getPermissions() {
    public byte[] getOriginalFileId() {
    public byte[] getModifiedFileId() {
    public RandomAccessFileOrArray getSafeFile() {
    public PdfAConformanceLevel getPdfAConformanceLevel() {

    public boolean hasXrefStm() {
    public boolean hasFixedXref() {
    public boolean hasHybridXref() {
    public boolean hasRebuiltXref() {

    public boolean isEncrypted() {
    public boolean isCloseStream() {
    public boolean isOpenedWithFullPermission() {

    public byte[] readStreamBytes(PdfStream stream, boolean decode) throws IOException {
    public byte[] readStreamBytesRaw(PdfStream stream) throws IOException {
    public InputStream readStream(PdfStream stream, boolean decode) throws IOException {

    public static byte[] decodeBytes(byte[] b, PdfDictionary streamDictionary) {
    public static byte[] decodeBytes(byte[] b, PdfDictionary streamDictionary, Map<PdfName, IFilterHandler> filterHandlers) {


    protected void readPdf() throws IOException {
    protected void readObjectStream(PdfStream objectStream) throws IOException {
    protected PdfObject readObject(PdfIndirectReference reference) {
    protected PdfObject readObject(boolean readAsDirect) throws IOException {
    protected PdfObject readReference(boolean readAsDirect) {
    protected PdfObject readObject(boolean readAsDirect, boolean objStm) throws IOException {
    protected PdfName readPdfName(boolean readAsDirect) {
    protected PdfDictionary readDictionary(boolean objStm) throws IOException {
    protected PdfArray readArray(boolean objStm) throws IOException {
    protected void readXref() throws IOException {
    protected PdfDictionary readXrefSection() throws IOException {
    protected boolean readXrefStream(long ptr) throws IOException {
    protected void fixXref() throws IOException {
    protected void rebuildXref() throws IOException {

    boolean isMemorySavingMode() {

    private void readDecryptObj() {
    private static PdfTokenizer getOffsetTokeniser(IRandomAccessSource byteSource, boolean closeStream) throws IOException {
    private PdfObject readObject(PdfIndirectReference reference, boolean fixXref) {
    private void checkPdfStreamLength(PdfStream pdfStream) throws IOException {
    private PdfObject createPdfNullInstance(boolean readAsDirect) {

    static {
        DEFAULT_STRICTNESS_LEVEL = PdfReader.StrictnessLevel.LENIENT;
        endstream = ByteUtils.getIsoBytes("endstream");
        endobj = ByteUtils.getIsoBytes("endobj");
        correctStreamLength = true;
    }


*********
内部枚举:StrictnessLevel

    public static enum StrictnessLevel {
        CONSERVATIVE(5000),
        LENIENT(3000);

        private final int levelValue;

        private StrictnessLevel(int levelValue) {
        public boolean isStricter(PdfReader.StrictnessLevel compareWith) {


*********
静态内部类:ReusableRandomAccessSource

    protected static class ReusableRandomAccessSource implements IRandomAccessSource {
        private ByteBuffer buffer;

        public ReusableRandomAccessSource(ByteBuffer buffer) {

        public int get(long offset) {
        public int get(long offset, byte[] bytes, int off, int len) {

        public long length() {
        public void close() {

                  

ReaderProperties

public class ReaderProperties {
    protected byte[] password;
    protected Key certificateKey;
    protected Certificate certificate;
    protected String certificateKeyProvider;
    protected IExternalDecryptionProcess externalDecryptionProcess;
    protected MemoryLimitsAwareHandler memoryLimitsAwareHandler;

    public ReaderProperties() {
    }

    public ReaderProperties setPassword(byte[] password) {
    public ReaderProperties setPublicKeySecurityParams(Certificate certificate, Key certificateKey, String certificateKeyProvider, IExternalDecryptionProcess externalDecryptionProcess) {
    public ReaderProperties setPublicKeySecurityParams(Certificate certificate, IExternalDecryptionProcess externalDecryptionProcess) {
    public ReaderProperties setMemoryLimitsAwareHandler(MemoryLimitsAwareHandler memoryLimitsAwareHandler) {

    private void clearEncryptionParams() {
  
  

             

                   

**************

示例

        

public class Test4 {

    private static final String source = "./source/1.pdf";

    private static final String dest = "./security/1.pdf";
    private static final String dest2 = "./security/2.pdf";
    private static final String dest3 = "./security/3.pdf";

    public static void fun() throws Exception{  //设置文件拥有者、用户密码,
                                                //读取文件时需使用文件拥有者、或者用户密码
        PdfDocument pdfDocument = new PdfDocument(new PdfReader(source),
                new PdfWriter(dest, new WriterProperties()
                        .setStandardEncryption(
                                "123456".getBytes(StandardCharsets.UTF_8),
                                "1qaz2w".getBytes(StandardCharsets.UTF_8),
                                EncryptionConstants.ALLOW_PRINTING,
                                EncryptionConstants.ENCRYPTION_AES_128
                        )
                ));

        pdfDocument.close();
    }

    public static void fun2() throws Exception{  //只设置文件拥有者密码,不设置用户密码,
                                                 //读取文件时不需要使用密码
        PdfDocument pdfDocument = new PdfDocument(new PdfReader(source),
                new PdfWriter(dest2, new WriterProperties()
                        .setStandardEncryption(
                                null,
                                "1qaz2w".getBytes(StandardCharsets.UTF_8),
                                EncryptionConstants.ALLOW_PRINTING,
                                EncryptionConstants.ENCRYPTION_AES_128
                        )
                ));

        pdfDocument.close();
    }

    public static void fun3() throws Exception{  //通过文件拥有密码获取用户密码
        PdfDocument pdfDocument = new PdfDocument(new PdfReader(dest,
                new ReaderProperties().setPassword("1qaz2w".getBytes(StandardCharsets.UTF_8))));

        byte[] passwordBytes = pdfDocument.getReader().computeUserPassword();
        System.out.println(passwordBytes!=null?new String(passwordBytes):"null");
    }

    public static void fun4() throws Exception{  //不设置用户密码,可直接读取文件
        PdfDocument pdfDocument = new PdfDocument(new PdfReader(dest2)
                .setUnethicalReading(true), new PdfWriter(dest3));

        pdfDocument.close();
    }

    public static void main(String[] args) throws Exception{
        fun();
        fun2();

        fun3();
        fun4();
    }
}

         

fun:同时设置拥有者、用户密码,查看需输入密码(拥有者、用户密码均可)

                 itextpdf 加密解密

                 itextpdf 加密解密 

                   

fun2:只设置拥有者密码、不设用户密码,可不输入密码直接查看文件

                 itextpdf 加密解密

                             

                            

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149815.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker的端口映射_docker swarm 网络

    docker的端口映射_docker swarm 网络docker网络端口映射

    2022年10月7日
    3
  • Java读取txt文件和写入txt文件

    Java读取txt文件和写入txt文件原文:Java读取txt文件和写入txt文件写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂!packageedu.thu.keyword.test;importjava.io.File;importjava.io.InputStreamReader;i

    2022年7月26日
    7
  • Java 审计之xss审计要点

    Java审计之xss审计要点0x00前言上篇文章讲了xss的一个简单审计,这篇文章可以来复盘一下上篇文章内容在上篇文章基础上做一个详细说明,以及其他的一些审计姿势。首发:Java审计之XSS

    2021年12月12日
    265
  • 211高校导师解散微信群直言:和你们没感情,江湖不见!校方回应

    211高校导师解散微信群直言:和你们没感情,江湖不见!校方回应来源丨爆炸吧知识近日,哈尔滨工程大学一教授把他指导的63名学生的微信群就地解散了,解散群之前,他还在群里表示“和你们没有感情,永远不想和你们打交道,也不要找我问学科问题,江湖不见”。随后,…

    2022年5月19日
    63
  • SQL注入学习「建议收藏」

    SQL注入学习「建议收藏」SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。学习目的:能找到注入点能判断数据库是什么类型能绕过各种过滤SQL注入平台层注入原因:数据库平台漏洞或数据库配置不安全代码层注入原因:程序员对输入未进行细致地过滤,从而执行了非法的数据查询SQL注入漏洞的方法数字注入字符串注入SQL注入方法有很多种,按数据类型可以分为

    2022年8月20日
    10
  • 在linux里如何建立一个快捷方式,连接到另一个目录

    在linux里如何建立一个快捷方式,连接到另一个目录

    2021年10月27日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号