對稱加密:
加密算法有DES(Data Encryption Standard 即數(shù)據(jù)加密標(biāo)準(zhǔn)),AES。。
DES加密的原理是對bit位進行操作,交換位置,異或等
使用DES加密時,每次取64位明文,即8個字節(jié)進行操作,密碼可以隨機生成也可以根據(jù)自己定義的字符串生成,這個字符串至少要56位,但傳的時候至少64位,其中8位是校驗碼
代碼:
//得到Cipher對象?
Ciphercipher=Cipher.getInstance("DES");?
//2,創(chuàng)建隨機秘鑰?
SecretKeykey=KeyGenerator.getInstance("DES").generateKey();?
//3,設(shè)置操作模式(加密/解密)
?cipher.init(Cipher.ENCRYPT_MODE,key);?
//4,執(zhí)行操作
byte[]result=cipher.doFinal("哈哈".getBytes());
非對稱加密
RSA,背包算法..
RSA內(nèi)部是基于分解質(zhì)因數(shù)和取模操作
代碼:
//1,獲取cipher對象?
Ciphercipher=Cipher.getInstance("RSA");?
//2,通過秘鑰對生成器KeyPairGenerator生成公鑰和私鑰 KeyPairkeyPair=KeyPairGenerator.getInstance("RSA").generateKeyPair();?
//使用公鑰進行加密,私鑰進行解密(也可以反過來使用)?
PublicKeypublicKey=keyPair.getPublic();
?PrivateKeyprivateKey=keyPair.getPrivate();?
//3,使用公鑰初始化密碼器?
cipher.init(Cipher.ENCRYPT_MODE,publicKey);?
//4,執(zhí)行加密操作
byte[]result=cipher.doFinal(content.getBytes());?
//使用私鑰初始化密碼器?
cipher.init(Cipher.DECRYPT_MODE,privateKey);?
//執(zhí)行解密操作?
byte[]deResult=cipher.doFinal(result);
一次性加密數(shù)據(jù)的長度不能大于117個字節(jié),一次性解密數(shù)據(jù)的長度不能大于128個字節(jié)
非對稱加密會比對稱加密慢很多,極端情況下慢1000倍,并且一般不會用來加密大量的數(shù)據(jù)
消息摘要
MD5,SHA
消息摘要:通過算法拿到明文的16進制字符串
消息摘要后的結(jié)果都是固定長度的,MD5是16個字節(jié),SHA是40個字節(jié)
//常用算法:MD5、SHA、CRC2.?
MessageDigestdigest=MessageDigest.getInstance("MD5");?
byte[]result=digest.digest(content.getBytes());?
//消息摘要的結(jié)果一般都是轉(zhuǎn)換成16進制字符串形式展示?
Stringhex=Hex.encode(result);?
//MD5結(jié)果為16字節(jié)(128個比特位)、轉(zhuǎn)換為16進制表示后長度是32個字符?
//SHA結(jié)果為20字節(jié)(160個比特位)、轉(zhuǎn)換為16進制表示后長度是40個字符?
System.out.println(hex);
數(shù)字簽名
是非對稱加密和消息摘要的組合應(yīng)用
1,校驗用戶的身份(私鑰簽名和公鑰校驗)
2,校驗數(shù)據(jù)的完整性(解密的消息摘要和原文的消息摘要進行對比)
上圖的過程:
1、經(jīng)私鑰加密的原文消息摘要+原文
2、進行網(wǎng)絡(luò)傳輸
3、公約解密原文的消息摘要和傳輸過來的原文的消息摘要進行對比
數(shù)字簽名一般不單獨使用,基本都是用在數(shù)字證書里面實現(xiàn)SSL通信協(xié)議
數(shù)字證書
是互聯(lián)網(wǎng)通訊中標(biāo)志各方身份的一串?dāng)?shù)字,數(shù)字證書不是數(shù)字身份證,而是身份認證機構(gòu)(CA機構(gòu))蓋在數(shù)字身份證上的一個章,就像結(jié)婚證上的章(數(shù)字證書),由民政局(CA機構(gòu))給你蓋的
1、用于確認通信雙方的身份
2、對應(yīng)用進行簽名
數(shù)字證書的版本信息:
1、唯一的證書序列號
2、簽名所使用的算法
3、發(fā)行機構(gòu)的名稱
4、證書的有效期
5、證書所有人的公開密鑰。。。。。。。
查看數(shù)字證書(瀏覽器的開發(fā)者工具)
數(shù)字證書原理:
1、數(shù)字簽名:私鑰加密明文的消息摘要
2、密文:明文+數(shù)字簽名+A的數(shù)字證書對稱加密
3、數(shù)字信封:B的公開密鑰加密對稱密鑰+B的數(shù)字證書
4、將密文和數(shù)字信封進行網(wǎng)絡(luò)傳輸
5、對稱密鑰:取出數(shù)字信封,用B的私鑰解密
6、用對稱密鑰解密密文得到明文+數(shù)字簽名+A的數(shù)字證書
7、消息摘要:A的公鑰解密數(shù)字簽名
8、拿到明文的消息摘要和數(shù)字簽名中的消息摘要對比
A、B的公鑰得互換,可以對消息摘要“加鹽”