如何使用itext

时间:2018-08-22 23:48:51

标签: java pdf encryption fonts itext

我正在尝试在pdf中编写IV(初始化向量),key和秘密token(IV和密钥来自javax.crypto)。这样做的目的是将受保护的数据写入受密码保护的文本文件中(这样您就可以轻松地从代码中读取数据,而不能从读取器中读取数据)。

以下是我初始化每个字符串(我转换为字符串的字节数组)的方式

IV:

byte[] iv = new byte[128/8];
SecureRandom srandom = new SecureRandom();
srandom.nextBytes(iv);
String iv = new String(ivb, "UTF-8");

键:

KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecretKey skey = kgen.generateKey();
byte[] keyb = skey.getEncoded();
String key = new String(keyb, "UTF-8");

秘密令牌:

byte[] stringBytes = TOKEN.getBytes("UTF-8");
byte[] encodedBytes = cipher.doFinal(stringBytes);
String token = new String(tokenb, "UTF-8");

然后,我将每个字符串都写成pdf:

BaseFont bf = BaseFont.createFont("arialuni.ttf", 
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

PdfWriter writer = PdfWriter.getInstance(document, zrsz);
writer.setEncryption("ownerPass".getBytes(), "userPass".getBytes(), 0, PdfWriter.ENCRYPTION_AES_128);
writer.createXmpMetadata();
document.open();

document.add(new Paragraph(iv, new Font(bf, 22)));
document.newPage();
document.add(new Paragraph(key, new Font(bf, 22)));
document.newPage();
document.add(new Paragraph(token, new Font(bf, 22)));

,但pdf文件的结果不同。例如,对于IV字符串

第一张图片:记事本中的IV,使用FileOutputStream处理.txt ;第二张图片:Acrobat Reader中的IV,使用document.add(新段落)

IV in notepad using FileOutputStream for a .txt

IV in Acrobat Reader using document.add(new Paragraph)

使用iText document.add(new Paragraph)时某些字符会丢失。我读了另一个问题,我应该使用一种可以识别我要写的字符的字体。所以我问字体是否有问题,或者可能是其他原因。

0 个答案:

没有答案