对称加密整个过程
對稱加密
對稱密碼技術:發件人和收件人使用其共同擁有的單個密鑰 ,這種密鑰既用于加密,也用于解密,叫做機密密鑰(也稱為對稱密鑰或會話密鑰)。
????能夠提供信息機密性(沒有密鑰信息不能被解密)、完整性(被改變的信息不能被解密)的服務。
????對稱式密碼學又稱:單鑰密碼學、秘密密鑰密碼學、會話密鑰密碼學、私鑰密碼學、共享秘鑰密碼學
常見的對稱式加密技術
?DES(數據加密標準):分組式加密,算法源于Lucifer,作為NIST對稱式加密標準;64位(有效位56位、校驗8位),分組算法
??3DES:128位,分組算法
????IDEA(國際數據加密算法):128位,比DES快,分組算法
????Blowfish:32-448位,算法公開,分組算法
????RC4:流密碼,密鑰長度可變
????RC5:分組密碼,密鑰長度可變,最大2048位
????Rijndael:128位/196位/256位
????AES(高級加密標準):DES升級版,算法出自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是一種對稱加密算法,所謂對稱加密算法即:加密和解密使用相同密鑰的算法。DES加密算法出自IBM的研究,* 后來被美國政府正式采用,之后開始廣泛流傳,但是近些年使用越來越少,因為DES使用56位密鑰,以現代計算能力,* 24小時內即可被破解。雖然如此,在某些簡單應用中,我們還是可以使用DES加密算法,本文簡單講解DES的JAVA實現 。* 注意:DES加密和解密過程中,密鑰長度都必須是8的倍數*/ public class DES {public DES() {}// 測試public static void main(String args[]) throws Exception {// 待加密內容String str = "leon666";// 密碼,長度要是8的倍數 密鑰隨意定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());// 創建一個密匙工廠,然后用它把DESKeySpec轉換成SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey securekey = keyFactory.generateSecret(desKey);// Cipher對象實際完成加密操作Cipher cipher = Cipher.getInstance("DES");// 用密匙初始化Cipher對象,ENCRYPT_MODE用于將 Cipher 初始化為加密模式的常量cipher.init(Cipher.ENCRYPT_MODE, securekey, random);// 現在,獲取數據并加密// 正式執行加密操作return cipher.doFinal(datasource); // 按單部分操作加密或解密數據,或者結束一個多部分操作} 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算法要求有一個可信任的隨機數源SecureRandom random = new SecureRandom();// 創建一個DESKeySpec對象DESKeySpec desKey = new DESKeySpec(password.getBytes());// 創建一個密匙工廠SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 返回實現指定轉換的// Cipher// 對象// 將DESKeySpec對象轉換成SecretKey對象SecretKey securekey = keyFactory.generateSecret(desKey);// Cipher對象實際完成解密操作Cipher cipher = Cipher.getInstance("DES");// 用密匙初始化Cipher對象cipher.init(Cipher.DECRYPT_MODE, securekey, random);// 真正開始解密操作return cipher.doFinal(src);} }?
總結
- 上一篇: 为什么接口需要加密传输
- 下一篇: 对称加密优缺点