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


相关推荐

  • jQuery遮罩层登录对话框

    用户登录是许多网站必备的功能。有一种方式就是不管在网站的哪个页面,点击登录按钮就会弹出一个遮罩层,显示用户登录的对话框。这用方式比较灵活方便。而现在扫描二维码登录的方式也是很常见,例如QQ、微信、百度

    2021年12月28日
    37
  • 使用idea打war包[通俗易懂]

    使用idea打war包[通俗易懂]1.将整个maven工程先下载一下2.在子工程下选择package3.去工作空间找到自己的项目然后进入target就可以看到war包。4.可以使用压缩软件打开看看打包是否正确。…

    2025年7月16日
    3
  • 如何完全卸载Android Studio (干干净净)

    如何完全卸载Android Studio (干干净净)

    2021年10月2日
    1.2K
  • python简单代码_gdal python

    python简单代码_gdal python目标:实现GBDT+LR模型代码,并比较和各种RF/XGBoost+LR模型的效果,发现GBDT+LR真心好用啊。内容:构造GBDT+LR步骤训练阶段:1、获取特性信息2、训练GBDT分类器3、遍历GBDT树的叶子节点,拼接成一个常常的一维向量4、训练OneHot编码器5、训练LR模型预测阶段:1、把带预测的特征输入到GBDT2、获得叶子节点,拼接成一个常常的一维向量3、获得OneHot向量4、LR预测结果这里发现了上篇文章的一个错误:就是GBDT树的叶子节点,输

    2022年10月10日
    3
  • 设置smtp服务器信息,SMTP服务器设置(IIS6.0)

    设置smtp服务器信息,SMTP服务器设置(IIS6.0)由IIS提供的简单邮件传输协议(SMTP)服务交付传出电子邮件的简单组件。消息的递送由消息传送到一个指定的SMTP服务器发起。根据收件人的电子邮件地址的域名,SMTP服务器启动与域名系统(DNS)服务器,它抬起头,然后返回该域的目标SMTP服务器的主机名通信。接下来,发起SMTP服务器直接通过传输控制协议/Internet协议(TCP/IP)端口25上的目标SMTP服务器通信,如果收件人的…

    2022年9月29日
    2
  • docker镜像的导出与导入「建议收藏」

    docker镜像的导出与导入「建议收藏」内网干活的忧桑大概就是偷点懒,使用docker镜像,dockerfile中使用的镜像内网中却没法down下来,so….找个外网机,先把需要的镜像下载下来,再将下载好的镜像载入到内网机。通过查资料,docker镜像的导入导出命令有save,load,export,import;其中save保存的是镜像,load加载的是镜像包(不能对镜像重命名);export保存的是容器,import载入的是容器包,可以为镜像指定新名称。同时,export导出的文件再…

    2025年9月17日
    5

发表回复

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

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