Android中的加密算法可以分為兩類:對(duì)稱加密 和 非對(duì)稱加密
對(duì)稱加密(DES、3DES、AES)
概念
對(duì)稱加密算法中,發(fā)送方將明文和加密密匙經(jīng)過特殊加密算法處理后,使其形成變成復(fù)雜的密文后發(fā)送出去。接受方用同樣的密匙、同樣加密算法的逆算法對(duì)密文進(jìn)行解密。傳統(tǒng)的DES加密算法只有56位密匙,最新AES技術(shù)擁有128位密匙。大大提高了安全性。優(yōu)點(diǎn):算法公開、計(jì)算量小、加密速度快、加密效率高
缺點(diǎn):發(fā)送方和接受方擁有同樣的密匙,安全問題得不到保證;管理密匙會(huì)成為額外的負(fù)擔(dān);可逆。
非對(duì)稱加密(MD5、SHA、RSA、DSA)
- 概念
非對(duì)稱加密算法中,發(fā)送方和接收方需要使用完全不同但又完全匹配的一對(duì)鑰匙即 公匙 和 私匙來加密和解密數(shù)據(jù)。如果發(fā)送方只想要接收方解密數(shù)據(jù),發(fā)送方就需要先拿到接收方的公匙,并且發(fā)送方并不知道接收方的私匙。 - 優(yōu)點(diǎn):安全,不可逆
Base64
Base64其實(shí)就是將數(shù)據(jù)進(jìn)行base64編碼傳輸,不算什么加密算法。
異或加密
原理:某個(gè)值異或一個(gè)數(shù)2次后,得到是本身
異或運(yùn)算中,如果某個(gè)字符(或數(shù)值)x 與 一個(gè)數(shù)值m 進(jìn)行異或運(yùn)算得到y(tǒng),則再用y 與 m 進(jìn)行異或運(yùn)算就可以還原為 x ,因此應(yīng)用這個(gè)原理可以實(shí)現(xiàn)數(shù)據(jù)的加密解密功能。
//固定key的方式
public byte[] encrypt(byte[] bytes) {
int len = bytes.length;
int key = 0x12;
for (int i = 0; i < len; i++) {
bytes[i] ^= key;
}
return bytes;
}
//測(cè)試
byte[] bytes = encrypt("whoislcj".getBytes());//加密
String str1 = new String(encrypt(bytes));//解密
//不固定 (加密)
public byte[] encrypt(byte[] bytes) {
int len = bytes.length;
int key = 0x12;
for (int i = 0; i < len; i++) {
bytes[i] = (byte) (bytes[i] ^ key);
key = bytes[i];
}
return bytes;
}
//解密
public byte[] decrypt(byte[] bytes) {
int len = bytes.length;
int key = 0x12;
for (int i = len - 1; i > 0; i--) {
bytes[i] = (byte) (bytes[i] ^ bytes[i - 1]);
}
bytes[0] = (byte) (bytes[0] ^ key);
return bytes;
}
//測(cè)試
byte[] bytes = encrypt("whoislcj".getBytes());//加密
String str1 = new String(decrypt(bytes));//解密