Android客戶端與服務器進行數據傳輸時,一般會涉及到兩類數據的加密情況,一類是只有創建者才能知道的數據,比如密碼;另一類是其他比較重要的,但是可以逆向解密的數據。
第一類:密碼類的數據,為了讓用戶放心注冊,密碼類的數據的加密一般都是經過雙重加密的,第一重加密使用不可逆的MD5算法加密,第二重加密是可逆的加密,常見的可逆加密有對稱加密和非對稱加密。上述不可逆的意思就是一旦加密就不能反向得到密碼原文,一般用來加密用戶密碼,app的服務器端一般存儲的也都是密文密碼,不然用戶就太危險了,app的運營商也承擔不起這么大的責任。雖然現在MD5加密生成的密文也可以破解了,但是我們不需要擔心,因為我們可以采用多重加密方式來應對。在數據傳輸的過程中,首先把密碼類數據經過MD5加密算法加密,然后再在外面使用可逆的加密方式加密一次,這樣在數據傳輸的過程中,即便數據被截獲了,但是想要完全破解,還是很難的(本來就不存在完全不能解密的加密)。
MD5加密算法:
- public String getMD5Code(String info) {
- try {
- MessageDigest md5 = MessageDigest.getInstance("MD5");
- md5.update(info.getBytes("UTF-8"));
- byte[] encryption = md5.digest();
- StringBuffer strBuf = new StringBuffer();
- for (int i = 0; i < encryption.length; i++) {
- if (Integer.toHexString(0xff & encryption[i]).length() == 1) {
- strBuf.append("0").append(
- Integer.toHexString(0xff & encryption[i]));
- } else {
- strBuf.append(Integer.toHexString(0xff & encryption[i]));
- }
- }
- return strBuf.toString();
- } catch (Exception e) {
- // TODO: handle exception
- return "";
- }
- }
第二類數據:非密碼類的數據,雖然這些數據也很重要,但是一般其他人截獲了這些數據對他們意義不太大,這些數據我們一般采用可逆的加密方式加密,因為我們在服務器端還是需要這些數據的明文的,常用的可逆加密方法有:對稱加密和非對稱加密。何為對稱加密?在對稱加密算法中,數據發信方將明文和加密密鑰一起經過特殊的加密算法處理后,使其變成復雜的加密密文發送出去,收信方收到密文后,若想解讀出原文,則需要使用加密時用的密鑰以及相同加密算法的逆算法對密文進行解密,才能使其回復成可讀明文。在對稱加密算法中,使用的密鑰只有一個,收發雙方都使用這個密鑰,這就需要解密方事先知道加密密鑰。非對稱加密算法是一種密鑰的保密方法。非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。 非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密后再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密后的信息進行解密。