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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一键禁用Win10自动更新,联想官方出品!!

    一键禁用Win10自动更新,联想官方出品!!对于Win10系统的强制更新,真的是是又爱又恨,更新是为了解决电脑系统存在的安全风险以及加入一些新功能,但经常性的开机或者关机都要更新配置,遇到大更新还需要花费很长的等待时间,更加可气的是还会出现更新失败的风险。有时真恨不得将它永久禁止更新。。目前网络上常见的禁止更新方法有两种,1、禁用WindowsUpdata相关服务;2、通过组策略禁止更新。事实证明这两种方法已经摆脱不了win10自…

    2022年6月4日
    158
  • hrbust1224「建议收藏」

    hrbust1224「建议收藏」1.图形输出2.每一个图形的输出都有自己的规律3.不一定要自己一个个printf加for的一行行输出这样会有错4.好比是hrbust1224;这里写代码片include

    2022年5月4日
    45
  • 我是如何从零开始 Web 前端自学之路的?

    我是如何从零开始 Web 前端自学之路的?作者|六小登登责编|屠敏从2013年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”…

    2022年5月20日
    36
  • 大数据监控平台实践之路

    大数据监控平台实践之路大数据监控平台实践之路一、监控体系业务层:应用层:系统层:二、架构设计Telegraf:input:output:调度频率:服务启动:InfluxDB:服务启动:常用命令:Grafana:Grafana主要特性:简单使用介绍:原文地址:大数据监控平台实践之路一、监控体系监控粒度、监控指标完整性、监控实时性是评价监控系统的三要素。从分层体系可以把监控系统分为三个层次:业务层:业务系统…

    2022年5月27日
    32
  • springboot介绍一下_SpringBoot打包

    springboot介绍一下_SpringBoot打包一、SpringBoot和SpringMVC的关系SpringBoot是SpringMVC的升级版SpringBoot的特点:化繁为简,简化配置微服务->SpringCloud->SpringBoot二、前置知识利用maven构建项目Spring注解RESTfulAPI

    2022年9月23日
    4
  • spring注解解析流程_深入理解Kafka

    spring注解解析流程_深入理解Kafka前言众所周知,spring从2.5版本以后开始支持使用注解代替繁琐的xml配置,到了springboot更是全面拥抱了注解式配置。平时在使用的时候,点开一些常见的等注解,会发现往往在一

    2022年8月16日
    5

发表回复

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

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