1. 程式人生 > >PGP 加密、解密 和 驗證簽名 函式 大全

PGP 加密、解密 和 驗證簽名 函式 大全

When we receive a one pass signed and encrypted OpenPGP message we can simply decrypt it or both decrypt it and verifythe authenticity of the sender in a single step.

This tutorial refers to version 1.7.12 or newer of the library. The tutorial for older versions is available here.

The examples below shows how to perform both decryption and verification with DidiSoft 

OpenPGP Library for .NET:

Decrypt and verify a file

Decrypt and verify a file that may contain multiple files inside

Decrypt and verify a String message

Decrypt and verify password encrypted file

Appendix

1. Decrypt and verify file with keys located in files

This example demonstrates OpenPGP decryption and verification of an OpenPGP one pass signed and encrypted file.
We use the public key of the other party to verify the source of this signed file. Our own private key is usually used for decryption.

C# example

using System;
using DidiSoft.Pgp;
 
public class DecryptAndVerify
{
 public void Demo()
 {
    // create an instance of the library
    PGPLib pgp = new PGPLib();
 
    SignatureCheckResult signatureCheck = 
         pgp.DecryptAndVerifyFile(@"C:\Test\OUTPUT.pgp",
                                  @"C:\Test\my_private_key.asc"
, "private key password", @"C:\Test\sender_public_key.asc", @"C:\Test\INPUT.txt"); if (signatureCheck == SignatureCheckResult.SignatureVerified) { Console.WriteLine("Signare OK"); } else if (signatureCheck == SignatureCheckResult.SignatureBroken) { Console.WriteLine("Signare of the message is either broken or forged"); } else if (signatureCheck == SignatureCheckResult.PublicKeyNotMatching) { Console.WriteLine("The provided public key doesn't match the signature"); } else if (signatureCheck == SignatureCheckResult.NoSignatureFound) { Console.WriteLine("This message is not digitally signed"); } } }

VB.NET example

Imports System
Imports DidiSoft.Pgp
 
Public Class DecryptAndVerify
 Public Sub Demo()
   ' create an instance of the library   
   Dim pgp As New PGPLib()
 
   Dim signatureCheck As SignatureCheckResult = _
       pgp.DecryptAndVerifyFile("C:\Test\OUTPUT.pgp", _
				"C:\Test\my_private_key.asc", _
				"private key password", _
				"C:\Test\sender_public_key.asc", _
				"C:\Test\INPUT.txt")
   If signatureCheck = SignatureCheckResult.SignatureVerified Then
	Console.WriteLine("Signare OK")
   ElseIf signatureCheck = SignatureCheckResult.SignatureBroken Then
	Console.WriteLine("Signare of the message is either broken or forged")
   ElseIf signatureCheck = SignatureCheckResult.PublicKeyNotMatching Then
	Console.WriteLine("The provided public key(s) doesn't match the signature")
   ElseIf signatureCheck = SignatureCheckResult.NoSignatureFound Then
	Console.WriteLine("This message is not digitally signed")
   End If
 End Sub
End Class

2. Decrypt and verify file with keys located in a KeyStore

In this example the public key of the sender is used for verification and our private key is used for decryption and they both are located in a KeyStore.

C# example

using System;
using DidiSoft.Pgp;
 
public class KeyStoreDecryptAndVerifyFile
{
 public static void Demo()
 {
   // initialize the KeyStore
   KeyStore keyStore = new KeyStore(@"c:\key.store", "key store pass");
 
   // create an instance of the library
   PGPLib pgp = new PGPLib();
 
   // we should provide the private decryption key password too
   String decryptionKeyPassword = "private key password";
   SignatureCheckResult signatureCheck = 
                       pgp.DecryptAndVerifyFile(@"c:\INPUT.pgp",
						keyStore,
						decryptionKeyPassword,
						@"c:\OUTPUT.txt");
   if (signatureCheck == SignatureCheckResult.SignatureVerified)
   {
	   Console.WriteLine("Signare OK");
   }
   else if (signatureCheck == SignatureCheckResult.SignatureBroken)
   {
	   Console.WriteLine("Signare of the message is either broken or forged");
   }
   else if (signatureCheck == SignatureCheckResult.PublicKeyNotMatching)
   {
	   Console.WriteLine("The provided public key doesn't match the signature");
   }
   else if (signatureCheck == SignatureCheckResult.NoSignatureFound)
   {
	   Console.WriteLine("This message is not digitally signed");
   }
 }
}

VB.NET example

Imports System
Imports DidiSoft.Pgp
 
Public Class KeyStoreDecryptAndVerifyFile
 Public Shared Sub Demo()
    ' initialize the KeyStore
    Dim keyStore As New KeyStore("c:\key.store", "key store pass")
 
    ' create an instance of the library
    Dim pgp As New PGPLib()
 
    ' we should provide the private decryption key password too
    Dim decryptionKeyPassword As String = "private key password"
    Dim signatureCheck As SignatureCheckResult = _
                pgp.DecryptAndVerifyFile("c:\OUTPUT.pgp", _
					  keyStore, _
					  decryptionKeyPassword, _
					  "c:\OUTPUT.txt")
    If signatureCheck = SignatureCheckResult.SignatureVerified Then
		Console.WriteLine("Signare OK")
    ElseIf signatureCheck = SignatureCheckResult.SignatureBroken Then
		Console.WriteLine("Signare of the message is either broken or forged")
    ElseIf signatureCheck = SignatureCheckResult.PublicKeyNotMatching Then
		Console.WriteLine("The provided public key(s) doesn't match the signature")
    ElseIf signatureCheck = SignatureCheckResult.NoSignatureFound Then
		Console.WriteLine("This message is not digitally signed")
    End If
 
 End Sub
End Class

3. Decrypt and verify a multiple file archive with keys located in files

This sample is useful in cases when the .pgp archive contains multiple files inside. The only drawback is that this we need to invoke two methods instead of one:

C# example

using System;
using DidiSoft.Pgp;
 
public class DecryptAndVerifyMulti
{
 public void Demo()
 {
	// create an instance of the library
	PGPLib pgp = new PGPLib();
 
	// private key to be used for decryption
	String privateKeyFile = @"DataFiles\private.key";
	String privateKeyPassword = "changeit";
 
	// public key of the sender, to be used for signature verficitaion
	String senderPublicKeyFile = 
            
           

相關推薦

PGP 加密解密 驗證簽名 函式 大全

When we receive a one pass signed and encrypted OpenPGP message we can simply decrypt it or both decrypt it and verifythe authenticity of the sende

非對稱加解密——RSA加密解密以及數字簽名

對稱與非對稱加解密,最主要區別在於:對稱加密,加解密的金鑰是一致的;非對稱加密,加解密的金鑰是不一致的; 對稱加密的例子如另一篇文章中的DES加解密、3DES加解密。 這裡要介紹的是非對稱加解密中,應用最廣泛的一種:RSA。 RSA簡介 RSA的由來,你可以簡單的百度到,它

深入理解加密解密數字簽名數字證書

)逐步在國內外得到廣泛應用。我們是否真的需要 PKI , PKI 究竟有什麼用?下面通過一個案例一步步地來剖析這個問題 : 甲想將一份合同檔案通過 Internet 發給遠在國外的乙,此合同檔案對雙方非常重要,不能有絲毫差錯,而且此檔案絕對不能被其他人得知其內容。如何才能實現這個合同的安全傳送?  問題 1:

https原理:證書傳遞驗證資料加密解密過程解析

寫的太好了,就是我一直想找的內容,看了這個對https立馬明白多了 我們都知道HTTPS能夠加密資訊,以免敏感資訊被第三方獲取。所以很多銀行網站或電子郵箱等等安全級別較高的服務都會採用HTTPS協議。 HTTPS簡介 HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了

深入理解加密解密數字簽名簽名證書加密證書)的組成數字證書

 深入理解加密、解密、數字簽名和數字證書  隨著電子商務的迅速發展,資訊保安已成為焦點問題之一,尤其是網上支付和網路銀行對資訊保安的要求顯得更為突出。為了能在因特網上開展安全的電子商務活動,公開金鑰基礎設施( PKI, Public Key Infrastructure

RSA 簽名驗證加密解密幫助類

ner back cin .get throws creat signature ecb byte import java.io.IOException; import java.security.InvalidKeyException; import java.s

RSA加密解密簽名驗籤的原理及方法

二、RSA加密、簽名區別   加密和簽名都是為了安全性考慮,但略有不同。常有人問加密和簽名是用私鑰還是公鑰?其實都是對加密和簽名的作用有所混淆。簡單的說,加密是為了防止資訊被洩露,而簽名是為了防止資訊被篡改。這裡舉2個例子說明。 第一個場景:戰場上,B要給A傳遞一條訊息,內容為某一指令。 RSA的加密過

RSA加密解密簽名驗簽的原理及方法

發送消息 私鑰 簽名 兩個 篡改 方法 保留 即使 指令 二、RSA加密、簽名區別   加密和簽名都是為了安全性考慮,但略有不同。常有人問加密和簽名是用私鑰還是公鑰?其實都是對加密和簽名的作用有所混淆。簡單的說,加密是為了防止信息被泄露,而簽名是為了防止信息被篡改。這裏舉2

對稱加密----AESDES加密解密

呼叫AES/DES加密演算法包最精要的就是下面兩句話:Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);CBC是工作模式,DES一共有電子密碼本模式(

加密解密函式

//加密函式 function lockUrl($txt, $key = 'demo_string') { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";

微信小程式-RSA簽名驗籤加密解密

title: 【小程式】RSA簽名 type: categories date: 2017-05-27 17:01:15 categories: 小程式 tags: [RSA, 簽名] 一個適用於微信小程式的RSA簽名加密庫。 使

數字證書應用綜合揭祕(包括證書生成加密解密簽名驗籤)

引言 數字證書是一個經證書授權中心數字簽名的包含公開金鑰擁有者資訊以及公開金鑰的檔案。為現實網路安全化標準,如今大部分的 B2B、B2C、P2P、O2O 等商業網站,含有重要企業資料個人資料的資訊資信網站,政府機構金融機構等服務網站大部分都使用了數字證書來加強網路的安全性。數字證書一般由經過國家認證的權威機

PHP 加密解密工具Zend GuardionCube

當前市場上較流行的對PHP進行上述加密授權的軟體主要有二種: (1)Zend公司的Zend Guard       Zend Guard不僅可以實現對PHP應用的指令碼進行加密保護和對PHP應用的產品進行商業許可證管理,還可以為許多軟體生產商、IT服務提供商提供完善

java實現對稱加密AESDES的加密解密

        目前主流的加密方式有:1、對稱加密:AES、DES      2、非對稱加密:RSA、DSA。         本文主要講解java實現呼叫AES/DES加密演算法包,呼叫過程最精要的就是下面兩句話: Cipher cipher = Cipher.getIn

php 自帶加密解密函式

php 自帶的加密函式 不可逆的加密函式為:md5()、crypt()md5() 用來計算 MD5 哈稀。語法為:string md5(string str);crypt() 將字串用 UNIX 的標準加密 DES 模組加密。這是單向的加密函式,無法解密。欲比對字串,將已加密的字串的頭二個字元放在 salt

MD5加密Base64DES可加密解密

在做專案的過程中,一般都會涉及到使用者名稱和密碼。而這個時候密碼就需要加密一下,在這裡我就用Md5加密了。而很多人會有這個疑問,Md5可以線上轉換,是的,的確可以線上轉換,那麼你可以試試多加密幾次,這樣線上工具解密的難度就會大大增大。而Base64和DES可加密也可解密,上程

【HAVENT原創】前端使用 jsrsasign 進行 RSA 加密解密簽名驗籤

最近因專案需求,需要配合 JAVA 後端返回的簽名,在 H5 網頁中做驗籤功能。網上搜了一下發現了 

簡單的文件讀寫---文件簡單的加密解密

directory runt turn encrypt r+ spa style static cep 文件加密 package encryption; import java.io.File; import java.io.IOException; import j

C# 設置Word文檔保護(加密解密權限設置)

C# .NET Word API 控件 免費類庫 Word 加密、解密 對於一些重要的word文檔,出於防止資料被他人查看,或者防止文檔被修改的目的,我們在選擇文檔保護時可以選擇文檔打開添加密碼或者設置文檔操作權限等,在下面的文章中將介紹如何使用類庫Free Spire.Doc for .

免費線上PHP加密解密混淆原始碼工具-toolfk.com

    本文要推薦的[ToolFk]是一款程式設計師經常使用的線上免費測試工具箱,ToolFk 特色是專注於程式設計師日常的開發工具,不用安裝任何軟體,只要把內容貼上按一個執行按鈕,就能獲取到想要的內容結果。ToolFk還支援  BarCode條形碼線上生成、&nb