对称加密整个过程
對(duì)稱加密
對(duì)稱密碼技術(shù):發(fā)件人和收件人使用其共同擁有的單個(gè)密鑰 ,這種密鑰既用于加密,也用于解密,叫做機(jī)密密鑰(也稱為對(duì)稱密鑰或會(huì)話密鑰)。
????能夠提供信息機(jī)密性(沒(méi)有密鑰信息不能被解密)、完整性(被改變的信息不能被解密)的服務(wù)。
????對(duì)稱式密碼學(xué)又稱:單鑰密碼學(xué)、秘密密鑰密碼學(xué)、會(huì)話密鑰密碼學(xué)、私鑰密碼學(xué)、共享秘鑰密碼學(xué)
常見(jiàn)的對(duì)稱式加密技術(shù)
?DES(數(shù)據(jù)加密標(biāo)準(zhǔn)):分組式加密,算法源于Lucifer,作為NIST對(duì)稱式加密標(biāo)準(zhǔn);64位(有效位56位、校驗(yàn)8位),分組算法
??3DES:128位,分組算法
????IDEA(國(guó)際數(shù)據(jù)加密算法):128位,比DES快,分組算法
????Blowfish:32-448位,算法公開,分組算法
????RC4:流密碼,密鑰長(zhǎng)度可變
????RC5:分組密碼,密鑰長(zhǎng)度可變,最大2048位
????Rijndael:128位/196位/256位
????AES(高級(jí)加密標(biāo)準(zhǔn)):DES升級(jí)版,算法出自Rinjindael
package com.learn.des;import java.security.SecureRandom; import javax.crypto.spec.DESKeySpec; import javax.crypto.SecretKeyFactory; import javax.crypto.SecretKey; import javax.crypto.Cipher;/*** DES加密介紹 DES是一種對(duì)稱加密算法,所謂對(duì)稱加密算法即:加密和解密使用相同密鑰的算法。DES加密算法出自IBM的研究,* 后來(lái)被美國(guó)政府正式采用,之后開始廣泛流傳,但是近些年使用越來(lái)越少,因?yàn)镈ES使用56位密鑰,以現(xiàn)代計(jì)算能力,* 24小時(shí)內(nèi)即可被破解。雖然如此,在某些簡(jiǎn)單應(yīng)用中,我們還是可以使用DES加密算法,本文簡(jiǎn)單講解DES的JAVA實(shí)現(xiàn) 。* 注意:DES加密和解密過(guò)程中,密鑰長(zhǎng)度都必須是8的倍數(shù)*/ public class DES {public DES() {}// 測(cè)試public static void main(String args[]) throws Exception {// 待加密內(nèi)容String str = "leon666";// 密碼,長(zhǎng)度要是8的倍數(shù) 密鑰隨意定String password = "95880288";byte[] encrypt = encrypt(str.getBytes(), password);System.out.println("加密后:" + new String(encrypt));// 解密byte[] decrypt = decrypt(encrypt, password);System.out.println("解密后:" + new String(decrypt));}/*** 加密* * @param datasource* byte[]* @param password* String* @return byte[]*/public static byte[] encrypt(byte[] datasource, String password) {try {SecureRandom random = new SecureRandom();DESKeySpec desKey = new DESKeySpec(password.getBytes());// 創(chuàng)建一個(gè)密匙工廠,然后用它把DESKeySpec轉(zhuǎn)換成SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey securekey = keyFactory.generateSecret(desKey);// Cipher對(duì)象實(shí)際完成加密操作Cipher cipher = Cipher.getInstance("DES");// 用密匙初始化Cipher對(duì)象,ENCRYPT_MODE用于將 Cipher 初始化為加密模式的常量cipher.init(Cipher.ENCRYPT_MODE, securekey, random);// 現(xiàn)在,獲取數(shù)據(jù)并加密// 正式執(zhí)行加密操作return cipher.doFinal(datasource); // 按單部分操作加密或解密數(shù)據(jù),或者結(jié)束一個(gè)多部分操作} catch (Throwable e) {e.printStackTrace();}return null;}/*** 解密* * @param src* byte[]* @param password* String* @return byte[]* @throws Exception*/public static byte[] decrypt(byte[] src, String password) throws Exception {// DES算法要求有一個(gè)可信任的隨機(jī)數(shù)源SecureRandom random = new SecureRandom();// 創(chuàng)建一個(gè)DESKeySpec對(duì)象DESKeySpec desKey = new DESKeySpec(password.getBytes());// 創(chuàng)建一個(gè)密匙工廠SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 返回實(shí)現(xiàn)指定轉(zhuǎn)換的// Cipher// 對(duì)象// 將DESKeySpec對(duì)象轉(zhuǎn)換成SecretKey對(duì)象SecretKey securekey = keyFactory.generateSecret(desKey);// Cipher對(duì)象實(shí)際完成解密操作Cipher cipher = Cipher.getInstance("DES");// 用密匙初始化Cipher對(duì)象cipher.init(Cipher.DECRYPT_MODE, securekey, random);// 真正開始解密操作return cipher.doFinal(src);} }?
總結(jié)
- 上一篇: 为什么接口需要加密传输
- 下一篇: 对称加密优缺点