PDF文件加密解密-文件设置密码

  • 简介
  • 代码
    • 1、两个jar包
    • 2、加密解密
    • 3、报错
  • 总结

简介

以往都是直接对文件通过AES加密,是对内容的加密。此次是对文件设置编辑密码,同样是可逆的。

代码

只是简单的基础逻辑,实现功能,还需要根据项目需要进行容错处理。加密解密过程相似,无非就是不加密码保存一下。

1、两个jar包

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version>
</dependency>
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version>
</dependency>

2、加密解密

加密

/**** @param src 未加密文件路径* @param dest 加密后存放的路径* @param password 密码* @return*/public static void encrypt(String src, String dest,String password) {try {PdfReader reader = new PdfReader(src);// 待加密码的文件PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));// 加完密码的文件stamper.setEncryption(password.getBytes(),password.getBytes(), PdfWriter.ALLOW_PRINTING, false);// 设置密码文件打开密码文件编辑密码stamper.close();//关闭流reader.close();} catch (Exception e) {e.printStackTrace();}}

解密

/*** 解密* @param src 未加密文件路径* @param dest 加密后存放的路径* @param password 密码*/public static void decrypt(String src, String dest,String password) {try {PdfReader reader = new PdfReader(src,password.getBytes());PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));// 加完密码的文件stamper.close();//关闭流reader.close();} catch (Exception e) {e.printStackTrace();}}

测试

public static void main(String[] args) {String filePath = "D:\\Users\\admin\\Desktop\\计划表.pdf";String savePath = "D:\\Users\\admin\\Desktop\\计划表 - 加密.pdf";String savePath1 = "D:\\Users\\admin\\Desktop\\计划表 - 解密.pdf";String password = "123456";encrypt(filePath,savePath,password);decrypt(savePath,savePath1,password);}

3、报错

当只引入itextpdf包时,就会报错:

java.lang.ClassNotFoundException: org.bouncycastle.asn1.ASN1OctetString

所以需要引入上文提到的第二个jar包bouncycastle

总结

目前,加密后只能放到输出流中,还不能比较灵活的转换文件存放类型,我也只是在重新创建一个输入流再转为base64字符串。还有就是加密后临时保存的文件,如果删除,注意要在使用之后并关闭相关的占用才行,以免传输中出现问题。

PDF文件加密解密-文件设置密码相关推荐

  1. (转)使用Vernam(维尔南/弗纳姆)算法实现文件加密解密[C#]

    原文:使用Vernam(维尔南/弗纳姆)算法实现文件加密解密[C#] 本文介绍如何通过Gilbert Sandford Vernam的算法实现一个简洁而又稳定的文件加密解密类.通过此类加密的数据是绝对 ...

  2. 【java】简单的文件加密解密方式

    一.基础知识 1.异或加密解密方式(推荐) package com.test;import java.io.*;public class test1 {private static final int ...

  3. 【C 语言】文件操作 ( 文件加密解密 | 解密文件 )

    文章目录 一.文件加密解密操作 1.解密整 4096 字节的数据 2.解密小于 4096 字节的数据 二.完整代码示例 1.文件加密操作 main.c 2.DES 加密解密头文件 des.h 3.第三 ...

  4. 【C 语言】文件操作 ( 文件加密解密 | 加密文件 )

    文章目录 一.文件加密解密操作 1.加密整 4096 字节的数据 2.加密小于 4096 字节的数据 二.完整代码示例 1.文件加密操作 2.DES 加密解密头文件 3.第三方 DES 加密解密函数库 ...

  5. 简易的遍历文件加密解密

    功能描述 将生成的可执行程序放在指定的文件夹内,双击后将该目录下所有文件包括子文件夹内文件全部加密,再次双击运行后将进行解密. 加密解密实现 主要运用了异或与取反操作,异或:两个值不同为1,相同为0. ...

  6. c语言文件加密解密单词统计,C语言文件加密解密及单词统计程序.doc

    C语言文件加密解密及单词统计程序.doc (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分  高级语言程序设计 课程设计学 院 计算 ...

  7. C 使用异或(xor)加密/解密文件

    C 使用异或(XOR)加密/解密文件 之前写过一篇<php 使用异或(XOR)加密/解密文件>,但php执行的速度很慢,因此这次使用C重写,速度有很大的提高. xor_encrypt.c ...

  8. Python 加密文件与解密文件

    话不多说直接上代码 代码版权归本人所有 转载请注明出处 加密文件 软件下载地址 提取码:97h2 # -*- coding: utf-8 -*- #AES-demo #采用AES对称加密算法 impo ...

  9. 简单文件加密解密系统(c++)

    简单文件加密解密系统(c++) 一.原理 二.实现思路 三.c++代码 四.运行结果 一.原理   为了实现加解密,首先需要一个码本文件.一个基本的码本文件包含26个字母,即a~z打乱顺序的结果,比如 ...

  10. 文件加密解密大师 v1.64 绿色

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

最新文章

  1. JS和JSP之间值传递
  2. linux c printf 打印输出null
  3. exit java_没有System.exit,如何退出Java程序?(通过用户输入?)
  4. python local_Python3中 对local和nonlocal 关键字的改善认识(新手向)
  5. 【期望】【高斯消元】图上游走(金牌导航 期望-6)
  6. ViewPager之使用PagerTabStrip添加标题栏,实现滑动效果
  7. 网狐荣耀6701/6801服务端 子游戏编译 部署
  8. [转]Ble蓝牙的使用手册
  9. POJ 3683 Priest John's Busiest Day (算竞进阶习题)
  10. 关于protel 99se 汉化后某些菜单消失的解决方法
  11. 通过读取原始星历文件数据推算GPS卫星位置坐标
  12. oracle 导入 imp-00008,imp导入文件时报大量的imp-0008错误
  13. 服务器sd卡装系统,sd卡如何重装系统操作教程
  14. 2009中国情爱报告:超4成未婚女性担心嫁不出去
  15. Valine-实现QQ邮箱识别生成头像地址(完美解决头像问题)
  16. 均衡器--时域均衡,频域均衡,无限长迫零(Zero force\ZF)均衡器,有限长时域迫零(ZF)均衡器,无限长MSE均衡器
  17. 阿里云 ECS windows服务器创建+部署+域名
  18. 如何保养COMAPQ/HP 电池
  19. 互联网创业如何起步(二)
  20. jar 打包java文件

热门文章

  1. jdk8Comparator.comparing 排序
  2. Leetcode 714
  3. 梅特勒-托利多 TCS-35 电子台秤
  4. 小样本学习(few-shot learning)之——原形网络(Prototypical Networks)
  5. Ext Gwt 实用例子--类似meebo的聊天界面
  6. CVE-2017-12635+12636 复现+反弹shell
  7. 我与鸟哥 Yar 的亲密接触
  8. Testing——Embedded MongoDB Database
  9. 使用ToUpperInvariant避免使用ToUpper
  10. 技术领导力 程序员如何才能带团队 文摘 (三)