2017-09-07 142 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

相關問題