2017-09-07 109 views
0

我正在构建一个Android应用程序,使用户可以将其数字签名添加到PDF文件。我所做的,到目前为止是,用户可以浏览并选择一个PDF文件,通过此功能查看:如何在Android中将位图图像添加到PDF中?

private void showFileChooser() { 
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
     intent.setType("application/pdf"); 
     intent.addCategory(Intent.CATEGORY_OPENABLE); 

     try { 
      startActivityForResult(
        Intent.createChooser(intent, "Select a File to Upload"), 
        FILE_SELECT_CODE); 
     } catch (android.content.ActivityNotFoundException ex) { 
      // Potentially direct the user to the Market with a Dialog 
      Toast.makeText(this, "Please install a File Manager.", 
        Toast.LENGTH_SHORT).show(); 
     } 
    } 

onActivityResult方法我所选择的文件URI扔PDF查看器查看。然后,用户可以通过自定义视图添加他们的签名,并将该签名作为位图获取,并将其保存为本地设备存储的图像。

我想要的是将此图像添加到当前查看的PDF文件作为它的一部分,并再次与图像一起保存PDF文件。

是否有人知道如何将签名位图图像添加到PDF文件并保存?

回答

1

根据您的应用程序在使用的国家/地区,我建议您对“数字签名”一词非常小心。

只是添加某人的签名图像不是一个非常安全的策略。使用Adobe,提取图像非常容易。这意味着我可以通过简单地重新插入图像来“伪造”任何已签名文档的签名。

在一个更复杂的方法,签名是通过添加额外的信息对文件进行如下(简化):

  • Bob希望签署一份PDF文档
  • 鲍勃计算的哈希值PDF(例如使用SHA256)
  • 鲍勃加密使用该哈希值自己的私钥
  • 鲍勃增加了加密哈希值的文件(沿着他的公钥,常规散列值,算法涉及的名字和时间戳)

现在假设Alice想验证鲍勃是否已签署

  • Alice知道鲍勃用于散列文件的算法
  • 爱丽丝使用解密加密散列(我们称之为签署的哈希) Bob的公钥
  • 解密后的散列值应该等于文档
  • 使用证书颁发机构的常规散列值,Alice知道使用的公钥确实属于Bob

为什么这样吗?

  • 完整性:如果任何人改变文档中的任何内容,哈希值将会改变。而Bob的签名散列将不再匹配文档的散列。所以Bob的签名只有在文档没有变更的情况下才能有效
  • 不可否认:只有Bob应该拥有Bob的私钥。只有Bob可以签名散列值。鲍勃不能否认签署了一份文件。
  • 身份验证:Alice知道(由于CA)确实是Bob签署了文档。

有关于这个
http://pages.itextpdf.com/ebook-digital-signatures-for-pdf.html

+0

非常有趣的一个很酷的电子书!谢谢澄清 – Badr

相关问题