天天看點

使用windows crypto API加密解密

 最近在學習使用windows crypto API 對資料進行加密和解密,有些收獲和經驗,在此分享,希望對學習加密解密的朋友們有所幫助。

      經過這次windows crypto API的學習過程,讓我明白一個道理。其實,使用windows API程式設計并不難,首先要有信心。MSDN提供了詳細的幫助和指南,許多問題,隻要詳細查閱MSND,完全可以不用在網上查找任何資料完成自己所需要的程式設計任務。

       網上的東西,許多都是來自别人的經驗介紹,很多,但也很雜,為了搜尋到真正有用的資料,往往需要花費很多的時間和精力。

       首先,大家不要覺得加密和解密是一件很深奧的事情,其實說白了,資料加密就是對原始資料進行一種變換而已,比如:你的密碼是123456,我對每一位都加1,即234567,寫到檔案中,這就是加密,隻要别人不知道你是對每一位都加1得到的234567,别人即使拿到你的密碼檔案,他也不知道怎樣把你的密碼從234567解密出來。(當然,這種簡單的加密是可以很容易被破解的)

       資料加密主要分為兩種,一種為對稱加密,另一種為非對稱加密。

       對稱加密主要用于大量資料的加密,加密和解密都使用同一份密鑰,密鑰其實就是一串資料,使用這一串資料對你要加密的資料進行與啊、或啊或者異或什麼的,于是就得到了一串人家看不懂的“密文”。

       非對稱加密最經典的應用場合是用戶端/伺服器模式的系統,主要用于需要在網絡中傳送的少量資料進行加密(比如用戶端的使用者名、密碼向伺服器傳送)。它使用兩份密鑰,公鑰和私鑰。

       公鑰用于發給用戶端,私鑰留在伺服器端。資料經過公鑰加密後隻能使用對應的私鑰來解密。

       是以,用戶端先對使用者名密碼資訊使用公鑰加密,然後向伺服器端發送,即使中途被黑客截獲,由于他沒有私鑰,故無法進行解密,當伺服器端收到資料後,就使用自己的私鑰進行解密。這樣就可以實作所有的用戶端都使用公鑰進行加密,然後放心地發送資料到伺服器端,因為隻有伺服器端才能夠解密。(思考一下:這種場合如果使用對稱密鑰安全嗎?)

       windows crypto API提供了對稱加密和非對稱加密,并且提供了各種加密、解密的算法,要使用相應的算法進行加密解密,隻需要對生成密鑰的函數的相關參數改變一下即可。

       為了學習使用windows crypto API,我沿襲以前的習慣,花費了大量的時間在網上搜尋資料(許多資料用處不大),最終還是在MSND的指導下完全掌握了crypto API的用法,不過,MSND還是有其不足之處,它較長的描述了crypto API相關的知識和資訊,但沒有從宏觀上對實作用crypto API加密解密到底需要做哪些事情進行做出明确地指導,故在此,我用下面這幅流程圖來告訴大家。

         我隻從宏觀上描述了整個加密解密需要進行的幾個流程,具體每一步的代碼怎麼寫,可以參考MSDN,或者本文後面連結的一份文檔(這份文檔講得非常詳細,也非常好,是我搜集的資料中最好的一份,希望對需要它的人有所幫助)

       當然,在學習和使用windows crypto API的過程中可能會遇到很多的問題,如果有什麼疑問,可以E—Mail給我。

本文轉自 Jhuster 51CTO部落格,原文連結:http://blog.51cto.com/ticktick/168538,如需轉載請自行聯系原作者

繼續閱讀