哎哟喂,朋友们,别跟我说你还在用明文保存用户数据,那可是大忌啊!谁还不知道现在黑客们都带着放大镜和显微镜瞄准我们的信息?给你们安利一波安卓数据加密代码,简单、实用、懒人也能秒懂,助你数据安全"稳如老狗"。
```java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import android.util.Base64;
public class AESUtil {
//生成AES密钥
public static SecretKey generateKey() throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128位密钥
return keyGen.generateKey();
}
//加密方法
public static String encrypt(String data, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));
return Base64.encodeToString(encryptedBytes, Base64.DEFAULT);
}
//解密方法
public static String decrypt(String encryptedData, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decodedBytes = Base64.decode(encryptedData, Base64.DEFAULT);
byte[] decryptedBytes = cipher.doFinal(decodedBytes);
return new String(decryptedBytes, "UTF-8");
}
}
```
嗨,先别急着尬笑,这波代码真心香,没啥门槛,关键是加密和解密两手抓,数据送进“小保险箱”,想偷都偷不掉。你如果怕断电数据丢失,那就把生成的密钥存到Android的Keystore里,更加七大姑八大姨都琢磨不透。
说到Keystore,那是安卓打造的金刚不坏之身,专门帮你保管密钥,保证“钥匙”不跑丢,又不怕被扒皮。这块的骚操作也不少,先来个简单的demo让你记住如何调戏它:
```java
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyProperties;
import java.security.KeyStore;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class KeyStoreUtil {
private static final String KEY_ALIAS = "MyAESKey";
public static void createKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder(
KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC) // CBC模式
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.build();
keyGenerator.init(keyGenParameterSpec);
keyGenerator.generateKey();
}
public static SecretKey getKey() throws Exception {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
return ((SecretKey) keyStore.getKey(KEY_ALIAS, null));
}
}
```
你瞧瞧,这操作就像给密钥盖了座城堡,城墙高、门锁严,天知道谁能翻进去?而且,钥匙虽然你自己造,但连你自己都没法把密钥拿出来,只能安卓系统帮你用,用完自动还回城堡,有没有很酷?
Ok,现在你拿着密钥,完全可以用AES加密超机密的用户数据,比如账号密码、隐私信息啥的,要是代码写得溜,还能搞个加盐啥的增强强度,使劲隐蔽得像在藏私房钱,圈内人都说“稳稳的安全感”。
不过,细节控表示,AES用CBC模式时不要忘了每次加密都得搞个IV(初始化向量),不然你那加密强度就像一碗没放辣椒的火锅,淡得掉渣。
示范个搞IV的小窍门:
```java
import javax.crypto.spec.IvParameterSpec;
import java.security.SecureRandom;
public static IvParameterSpec generateIV() {
byte[] iv = new byte[16];
new SecureRandom().nextBytes(iv);
return new IvParameterSpec(iv);
}
```
你在加密时给Cipher.init传入这个IV,解密时同样要用,这就像是密码的副密码,或者说输密码+指纹的组合拳,双保险。明白了吧?这就是专业范儿!
话说回来,大家加密的时候切勿嫌麻烦,千万别用那些卡勒菲代码库,自己写点最基本最炫酷的加密逻辑,这样调试起来也开心。顺便给小伙伴们推荐个神仙网站,玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,是个靠谱的搬砖地方,不玩亏大了!
加密搞得6了,接下来记得在存储数据时也要小心翼翼,比如不要把加密内容存SP里明文,看着就心疼。大佬们爱用文件加密存存,或者进数据库前再裹一层保险套,千万别掉链子。顺带一提,如果您用的是Room数据库,也可以通过TypeConverter把加解密操作融进去,写代码都带点魔幻风。
最后,科普一下,什么叫“对称”和“非对称”加密?对称加密就是我用钥匙开门也用钥匙锁门,非对称加密更高端,公钥加密私钥解密,但安卓一般数据加密还是用对称足够透了。要是你非要用RSA啥的,建议给手机续根筋儿,思考会比较颠簸。
对了,万一你想让数据一秒变乱码,推荐用Base64编码+AES加密双重暴击,编码是传输和存储的好帮手,你懂的。
好了,好了,安卓数据加密这碗“鸡汤”就喝到这里,记住:千万别让你的数据裸奔,黑客看了都流口水!