Java高級,加密

對稱加密:

加密算法有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的公鑰得互換,可以對消息摘要“加鹽”


Android應(yīng)用安全開發(fā)之淺談加密算法的坑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容