1、Base64非常適合http、mime協議,所以在一些類似webservice中可以用Base64。
用法如下:傳出去之前先 Convert.ToBase64String(encryptedBytes)
接收方則 Convert.FromBase64String(sourceString)
2、公鑰私鑰加密解密,這個網上很多,可以自己去找一下,但如果要和Base64搭配使用,要注意兩點:
1、Base64的長度是有限制的
2、建議先對文本做加密處理,在最外面再做Base64處理。
3、URLEnCode,對url進行轉碼,
3.1、數字和字母不變,中文會變化。
3.2、空格變為"+"號。
3.4、其他被編碼成"%"加上他們的ascii的十六進制,規律是這樣的。
4、URLDeCode,對url進行解碼,
方法一:如果是頁面解碼,其實Request.QueryString()會自動做解碼的動作。無需再寫一遍URLDeCode。
方法二:如果是其他地方調用,如Andriod調用.net的WebService,則需要做一次解碼的動作。
最近在做的一個項目遇到類似的情況,.net寫了一個WebService,其他網站調用這個WebService,同時手機端也在調用這個WebService,處理的情況是不一樣的,具體的設計思路如下:
1、網站和手機端調用的方法是不一樣的,網站調用的Webservice不需要做URLDecode,手機端調用的則需要做URLDecode
2、WebService中,針對一個要傳遞的文本先做公鑰加密,然后處理成base64。代碼如下(代碼不貼全,只做一個參考)
#region 公鑰加密/私鑰解密 (不限長string) public static string EncryptWithPublicKey(string sourceString) { var sourceBytes = Encoding.UTF8.GetBytes(sourceString); var encryptedBytes = EncryptWithPublicKey(sourceBytes); var encryptedString = Convert.ToBase64String(encryptedBytes); return encryptedString; } public static string DecryptWithPrivateKey(string sourceString) { var sourceBytes = Convert.FromBase64String(sourceString); var decryptedBytes = DecryptWithPrivateKey(sourceBytes); var decryptedString = Encoding.UTF8.GetString(decryptedBytes); return decryptedString; } #endregion 公鑰加密/私鑰解密(不限長string)
3、網站調用時直接用var str = Request.QueryString["str"]這個即可,不再需要Decode了, Request.QueryString會自動解碼。
4、Android則需要先DeCode。
5、在3、4的基礎上繼續做Base64處理,私鑰解密等處理,見代碼中的DecryptWithPrivateKey詳情。