久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

DES/3DES/AES 三種對(duì)稱加密算法在 Java 中的實(shí)現(xiàn)

 spzproot 2017-01-29

有兩句話是這么說的:

1)算法和數(shù)據(jù)結(jié)構(gòu)就是編程的一個(gè)重要部分,你若失掉了算法和數(shù)據(jù)結(jié)構(gòu),你就把一切都失掉了,。
2)編程就是算法和數(shù)據(jù)結(jié)構(gòu),,算法和數(shù)據(jù)結(jié)構(gòu)是編程的靈魂。

注意,,這可不是我說的,,是無數(shù)程序員總結(jié)的,話說的很實(shí)在也很精辟,,若想長久可持續(xù)發(fā)展,,多研究算法還是很有必要的,今天我給大家說說加密算法中的對(duì)稱加密算法,,并且這里將教會(huì)大家對(duì)稱加密算法的編程使用,。包含DES、3DES和AES三種對(duì)稱加密算法的編程使用,,干貨滿滿,。

1.對(duì)稱密碼算法

對(duì)稱密碼算法是當(dāng)今應(yīng)用范圍最廣,使用頻率最高的加密算法,。它不僅應(yīng)用于軟件行業(yè),,在硬件行業(yè)同樣流行。各種基礎(chǔ)設(shè)施凡是涉及到安全需求,都會(huì)優(yōu)先考慮對(duì)稱加密算法,。

對(duì)稱密碼算法的加密密鑰和解密密鑰相同,,對(duì)于大多數(shù)對(duì)稱密碼算法,加解密過程互逆,。

(1)加解密通信模型

加解密通信模型

(2)特點(diǎn):算法公開,、計(jì)算量小、加密速度快,、加密效率高

(3)弱點(diǎn):雙方都使用同樣密鑰,,安全性得不到保證

對(duì)稱密碼有流密碼和分組密碼兩種,但是現(xiàn)在普遍使用的是分組密碼:

(4)分組密碼工作模式

  • 1)ECB:電子密碼本(最常用的,,每次加密均產(chǎn)生獨(dú)立的密文分組,,并且對(duì)其他的密文分組不會(huì)產(chǎn)生影響,也就是相同的明文加密后產(chǎn)生相同的密文)
  • 2)CBC:密文鏈接(常用的,,明文加密前需要先和前面的密文進(jìn)行異或運(yùn)算,,也就是相同的明文加密后產(chǎn)生不同的密文)
  • 3)CFB:密文反饋
  • 4)OFB:輸出反饋
  • 5)CTR:計(jì)數(shù)器

這五種工作模式主要是密碼學(xué)中算法在進(jìn)行推導(dǎo)演算的時(shí)候所應(yīng)用到的。

6.分組密碼填充方式

  • 1)NoPadding:無填充
  • 2)PKCS5Padding:
  • 3)ISO10126Padding:

7.常用對(duì)稱密碼:

  • 1)DES(Data Encryption Standard,,數(shù)據(jù)加密標(biāo)準(zhǔn))
  • 2)3DES(Triple DES,、DESede,進(jìn)行了三重DES加密的算法)
  • 3)AES(Advanced Encryption Standard,,高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn),,AES算法可以有效抵制針對(duì)DES的攻擊算法)

先來看一下這三種算法的簡(jiǎn)單對(duì)比:

算法密鑰長度默認(rèn)密鑰長度工作模式填充方式
DES5656ECB、CBC,、PCBC,、CTR、CTS,、CFB、CFB8-CFB128,、OFB,、OFB8-OFB128NoPadding、PKCS5Padding,、ISO10126Padding
3DES112,、168168ECB、CBC,、PCBC,、CTR、CTS,、CFB,、CFB8-CFB128、OFB,、OFB8-OFB128NoPadding,、PKCS5Padding,、ISO10126Padding
AES128、192,、256128ECB,、CBC、PCBC,、CTR,、CTS、CFB,、CFB8-CFB128,、OFB、OFB8-OFB128NoPadding,、PKCS5Padding,、ISO10126Padding

下面我們看如何使用 DES / 3DES / AES 三種算法實(shí)現(xiàn) 對(duì)稱加密:

2.DES算法

1.DES:數(shù)據(jù)加密標(biāo)準(zhǔn),是對(duì)稱加密算法領(lǐng)域中的典型算法

2.特點(diǎn):密鑰偏短(56位),、生命周期短(避免被破解)

3.Java實(shí)現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance('DES');//密鑰生成器keyGen.init(56);//初始化密鑰生成器SecretKey secretKey = keyGen.generateKey();//生成密鑰byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組

2)加密

SecretKey secretKey = new SecretKeySpec(key, 'DES');//恢復(fù)密鑰Cipher cipher = Cipher.getInstance('DES');//Cipher完成加密或解密工作類cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對(duì)Cipher初始化,,加密模式byte[] cipherByte = cipher.doFinal(data);//加密data

3)解密

SecretKey secretKey = new SecretKeySpec(key, 'DES');//恢復(fù)密鑰Cipher cipher = Cipher.getInstance('DES');//Cipher完成加密或解密工作類cipher.init(Cipher.DECRYPT_MODE, secretKey);//對(duì)Cipher初始化,解密模式byte[] cipherByte = cipher.doFinal(data);//解密data

我們可以發(fā)現(xiàn),,加密解密我們只是設(shè)置了不同的模式而已,。

3.3DES算法

1.3DES:將密鑰長度增至112位或168位,通過增加迭代次數(shù)提高安全性

2.缺點(diǎn):處理速度較慢,、密鑰計(jì)算時(shí)間較長,、加密效率不高

3.Java實(shí)現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance('DESede');//密鑰生成器keyGen.init(168); //可指定密鑰長度為112或168,默認(rèn)為168 SecretKey secretKey = keyGen.generateKey();//生成密鑰byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組

2)3DES加密

SecretKey secretKey = new SecretKeySpec(key, 'DESede');//恢復(fù)密鑰Cipher cipher = Cipher.getInstance('DESede');//Cipher完成加密或解密工作類cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對(duì)Cipher初始化,,解密模式byte[] cipherByte = cipher.doFinal(data);//加密data

3)3DES解密

SecretKey secretKey = new SecretKeySpec(key, 'DESede');//恢復(fù)密鑰Cipher cipher = Cipher.getInstance('DESede');//Cipher完成加密或解密工作類cipher.init(Cipher.DECRYPT_MODE, secretKey);//對(duì)Cipher初始化,,解密模式byte[] cipherByte = cipher.doFinal(data);//解密data

4.AES算法(推薦使用)

1.AES:高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn),能夠有效抵御已知的針對(duì)DES算法的所有攻擊

2.特點(diǎn):密鑰建立時(shí)間短,、靈敏性好,、內(nèi)存需求低、安全性高

3.Java實(shí)現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance('AES');//密鑰生成器keygen.init(128); //默認(rèn)128,,獲得無政策權(quán)限后可為192或256SecretKey secretKey = keyGen.generateKey();//生成密鑰byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組

2)AES加密

SecretKey secretKey = new SecretKeySpec(key, 'AES');//恢復(fù)密鑰Cipher cipher = Cipher.getInstance('AES');//Cipher完成加密或解密工作類cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對(duì)Cipher初始化,,解密模式byte[] cipherByte = cipher.doFinal(data);//加密data

3)AES解密

SecretKey secretKey = new SecretKeySpec(key, 'AES');//恢復(fù)密鑰Cipher cipher = Cipher.getInstance('AES');//Cipher完成加密或解密工作類cipher.init(Cipher.DECRYPT_MODE, secretKey);//對(duì)Cipher初始化,解密模式byte[] cipherByte = cipher.doFinal(data);//解密data

為了方便使用,,我對(duì)DES / 3DES / AES 三種算法進(jìn)行了工具類編寫,,地址:https://github.com/smartbetter/Android-UtilsLibrary (新增DES/3DES/AES工具類)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多