【Win10應用開發】簽名與驗證


對數據進行簽名和驗證,是為了防止數據被“盜版”。比較常規的做法是通過公鑰進行驗證。

算法上多用SAH_xxxx,就是哈希算法。由於MD5后來被發現存在“非唯一性”,你會發現現在很多一些下載的文件驗證都用SHA1算法。比如我們下載一個系統.iso鏡像,下載后可以核對一下哈希值,來判斷文件是否完整且正確無誤。

簽名與驗證操作並不復雜。在Windows.Security.Cryptography.Core命名空間下提供支持,像AsymmetricKeyAlgorithmProvider、MacAlgorithmProvider都可以用來生成簽名的key。

 

本次我就以AsymmetricKeyAlgorithmProvider為例來演示,因為這廝可以生成公鑰/私鑰對,並且支持導入密鑰的操作。簽名后可以把key作為公鑰導出,在驗證時可以導入該公鑰。

第一步,先得到一個AsymmetricKeyAlgorithmProvider實例,不用實例化,直接通過靜態的OpenAlgorithm方法直接獲得,參數是要使用的算法。

            AsymmetricKeyAlgorithmProvider asymt = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.DsaSha1);

 

第二步,調用CreateKeyPair方法生成密鑰對,參數為位數,一般的值為512、1024、2048、4096,此處我用512,正常無異常。

            CryptographicKey key = asymt.CreateKeyPair(512);

另外,你還可以以公鑰的形式導出,這樣方便存儲。

            publicKey = key.ExportPublicKey();


 

第三步,可以對數據進行簽名了。

            IBuffer data = CryptographicBuffer.ConvertStringToBinary(txtInput.Text.Trim(), BinaryStringEncoding.Utf8);
            signedData = CryptographicEngine.Sign(key, data);

CryptographicEngine類公開一系列方法,用來完成加解密,要進行簽名,可調用Sign方法,或者異步等待的SignAsync方法。簽名之后返回簽名后的數據, 以IBuffer的形式存放。

 

數據簽名后可以進行驗證。

第一步,同樣,需要獲取一個AsymmetricKeyAlgorithmProvider實例。

            AsymmetricKeyAlgorithmProvider asmt = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.DsaSha1);


第二步,導入公鑰。調用ImportPublicKey方法就可以導入我們剛才導出的公鑰。

            CryptographicKey key = asmt.ImportPublicKey(publicKey);

導入成功后,直接可以返回一個CryptographicKey對象,下面可以直接用它來進行驗證了。注意公鑰必須與當初簽名時導出的公鑰相同,否則無法驗證。

第三步,可以進行驗證了。

            IBuffer data = CryptographicBuffer.ConvertStringToBinary(txtVerifyInput.Text.Trim(), BinaryStringEncoding.Utf8);
            // 注意,第三個參數是你剛才簽名后得到的數據
            bool b = CryptographicEngine.VerifySignature(key, data, signedData);

VerifySignature方法用於簽名驗證,第一個參數是公鑰,前后必須一致;第二個參數是待驗證的數據;第三個參數是前面簽名后得到的數據。如果驗證成功,返回true;不成功返回false。

 

===================================================

看看運行結果。

 

如果前后輸入的內容相同,驗證就會成功,如果前后輸入的內容不同,驗證就會失敗。

 

示例代碼下載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM