加密
對稱加密
image.png
- 對稱雙方使用同一個密鑰,使用加密算法配上合適的密鑰來加密猾昆,解密時(shí)使用加密過程的完全逆過程配合密鑰來進(jìn)行解密
- 經(jīng)典算法:DES,AES
- 優(yōu)點(diǎn):加密計(jì)算小,速度快潦牛,適合對大量數(shù)據(jù)進(jìn)行加密的場景
- 缺點(diǎn):密鑰傳輸泄露問題
栗子:AES
- AES是一個迭代的鬓催、對稱密鑰分組的密碼暂幼,它可以使用128走趋、192和256位密鑰爹耗,并且用128位(16字節(jié))分組加密和解密數(shù)據(jù)存淫。
AES加密
public static String encrypt(String text) throws Exception {
// 私鑰 AES固定格式為128/192/256bits.即:16/24/32bytes荤堪。DES固定格式為128bits合陵,即8bytes。
String key = "aaaaaaaaaaaaaaaa";
// 初始化向量參數(shù)澄阳,AES 為16bytes. DES 為8bytes
String iv ="bbbbbbbbbbbbbbbb";
// 兩個參數(shù)拥知,第一個為私鑰字節(jié)數(shù)組, 第二個為加密方式AES或者DES
Key keySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
// 實(shí)例化加密類碎赢,參數(shù)為加密方式低剔,要寫全
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// 初始化,此方法可以采用三種方式,按服務(wù)器要求來添加襟齿。(1)無第三個參數(shù)(2)第三個參數(shù)為SecureRandom
//(3)采用此代碼中的IVParameterSpec
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);// random = new SecureRandom();中random對象姻锁,隨機(jī)數(shù)。(AES不可采用這種方法)
// cipher.init(Cipher.ENCRYPT_MODE, keySpec);
// SecureRandom random = new SecureRandom();
// cipher.init(Cipher.ENCRYPT_MODE, keySpec, random);
byte[] bytes = cipher.doFinal(text.getBytes());// 加密操作,返回加密后的字節(jié)數(shù)組猜欺,然后需要編碼屋摔。主要編解碼方式有Base64, HEX, UUE,
// 7bit等等。此處看服務(wù)器需要什么編碼方式
String result = Base64.encodeToString(bytes, Base64.DEFAULT);
return result;}
AES解密
public static String decrypt(String text) throws Exception {
String keySpec = "aaaaaaaaaaaaaaaa";
String iv = "bbbbbbbbbbbbbbbb";
byte[] textBytes = Base64.decode(text.getBytes(), Base64.DEFAULT);
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
Key key = new SecretKeySpec(keySpec.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec); // 與加密時(shí)不同MODE:Cipher.DECRYPT_MODE
String result = cipher.doFinal(textBytes);
return result; }
非對稱加密
- 原理:使用公鑰對數(shù)據(jù)進(jìn)行加密得到密文替梨;使用私鑰解密得到明文
image.png
應(yīng)用場景:
1.數(shù)字簽名驗(yàn)證
使用私鑰簽名钓试,發(fā)送簽名數(shù)據(jù)和原數(shù)據(jù),采用公鑰驗(yàn)證副瀑,如果驗(yàn)證后數(shù)據(jù)等于發(fā)過來的原數(shù)據(jù)則正確弓熏,反之
image.png
加密簽名:發(fā)送方使用對方公鑰加密得到密文,在自己的私鑰簽名糠睡,接收方使用自己的私鑰解密挽鞠,用公鑰驗(yàn)證
image.png
- 經(jīng)典算法: RSA,DSA
BASE64
- 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成由64個字符組成的字符串編碼算法
- 用途:讓原數(shù)據(jù)具有字符串所具有的的特性狈孔,如可以放在URL中傳輸信认,可以保存到文本文件,可以通過普通的聊天軟件進(jìn)行文本傳輸
- 把原本人眼可以讀懂的字符串變成讀不懂的字符串均抽,降低偷窺風(fēng)險(xiǎn)
壓縮與解壓縮
- 壓縮:把數(shù)據(jù)換一種方式來存儲嫁赏,以減少存儲空間
- 解壓縮:把壓縮后的數(shù)據(jù)還原成原先的數(shù)據(jù),以便使用
- 常見壓縮算法:MP3,JEPG,DEELATE
HASH
定義:把任意數(shù)據(jù)轉(zhuǎn)換成指定大小的范圍(通常很杏突印)的數(shù)據(jù)
左右:摘要潦蝇,數(shù)字指紋
經(jīng)典算法:MD5,SHA1,SHA256
-
實(shí)質(zhì)用途
- 數(shù)據(jù)完整性驗(yàn)證
- 快速查找
- 隱私保護(hù)