非對稱加密算法RSA使用注意事項

第一個問題,也是最重要的一個——RSA無法對超過117字節的數據進行加密!切記!其實也勿需要求對更大數據的加密,雖然網上已經有相關解決方案,比如BigInteger項目。但這點確實需要注意,如果對大於117字節的數據加密就會拋異常出來,說法還有點莫名其妙。考慮下RSA的主要用途就可以理解了,一般我們使用RSA的主要用途是進行數字簽名,另外就是對“對稱加密”算法的KEY和IV向量進行加密;

 

第二個問題,假設要對一個文本文件(比如xml文件)中的某些數據進行加密,加密後再寫入文本文件怎麼辦呢?(如果將加密後的byte數組直接以流的形式寫入文件,則無此問題)這就涉及到一個byte[]到String的轉換問題,有的人馬上會說,這簡單嘛,用Encoding.Default.GetString唄,果真如此的話,也就沒有本問題了!如果你使用Encoding.Default.GetString保存加密結果到文件中,再解密的話你就會遇到下面這個異常:

  

原因是因爲使用Encoding.Default.GetString()對加密後的byte[](爲了後文方便,此處賦予其一個變量名right)進行處理後,再寫入文本文件,解密的時候再使用Encoding.Default.GetBytes()對將加密內容(String類型)轉換得到byte[]數組,這個時候得到的byte[]數組(變量名:wrong)已經不是前文的那個right變量來,內容和大小都不同!你拿一個錯誤的字符串去解密當然會報“不正確的數據”了,確實不正確嘛!

呵呵!下面說一下如何解決這個問題(下面只提供問題相關的代碼):

1)加密

2)解密

好了,現在一切OK!!順便說一下,RSA無法對超過128 BYTE的數據進行解密。

 

後記,今天突然想到可以Base64編碼,看來前面繞路了,下面我們使用Base64編碼再來實現一次,非常簡單:

1)加密

 

2)解密

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章