1. 程式人生 > >Java加密演算法DES

Java加密演算法DES

金鑰加密也稱為對稱加密,速度快,但加密和解密的鑰匙必須相同,只有通訊雙方才能知道鑰匙

package com.stone.security;

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

/**
 * DES 演算法		1972美國IBM研製,對稱加密演算法
 * @author stone
 * @date 2014-03-10 04:47:05
 */
public class DES {	
	// 演算法名稱
	public static final String KEY_ALGORITHM = "DES";
	// 演算法名稱/加密模式/填充方式
	public static final String CIPHER_ALGORITHM_ECB = "DES/ECB/PKCS5Padding";
	public static final String CIPHER_ALGORITHM_CBC = "DES/CBC/PKCS5Padding";
	
	public static void main(String[] args) throws Exception {
		/*
		 * 使用 ECB mode
		 * 金鑰生成器 生成金鑰
		 * ECB mode cannot use IV
		 */
		byte[] key = generateKey();	
		byte[] encrypt = encrypt("胃炎F#*(x)".getBytes(), key);
		System.out.println(new String(decrypt(encrypt, key)));
		
		
		/*
		 * 使用CBC mode
		 * 使用金鑰工廠生成金鑰,加密 解密
		 * iv: DES in CBC mode and RSA ciphers with OAEP encoding operation.
		 */
		DESKeySpec dks = new DESKeySpec(generateKey());
		SecretKeyFactory factory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
		SecretKey secretKey = factory.generateSecret(dks);
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
		cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(getIV()));
		byte[] enc = cipher.doFinal("胃炎A%F#*(x)".getBytes()); //加密
		
		cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(getIV()));
		byte[] dec = cipher.doFinal(enc); // 解密
		System.out.println(new String(dec));
	}
	
	static byte[] getIV() {
		String iv = "asdfivh7"; //IV length: must be 8 bytes long
		return iv.getBytes();
	}

	/**
	 * 生成金鑰
	 * 
	 * @return
	 * @throws Exception
	 */
	private static byte[] generateKey() throws Exception {
		KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
		keyGenerator.init(56); //des 必須是56, 此初始方法不必須呼叫
		SecretKey secretKey = keyGenerator.generateKey();
		return secretKey.getEncoded();
	}

	/**
	 * 還原金鑰
	 * 
	 * @param key
	 * @return
	 * @throws Exception 
	 */
	private static Key toKey(byte[] key) throws Exception {
		DESKeySpec des = new DESKeySpec(key);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
		SecretKey secretKey = keyFactory.generateSecret(des);
		return secretKey;
	}
	
	/**
	 * 加密 
	 * @param data 原文
	 * @param key
	 * @return 密文
	 * @throws Exception
	 */
	public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
		Key k = toKey(key);
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_ECB);
		cipher.init(Cipher.ENCRYPT_MODE, k, new SecureRandom());
		return cipher.doFinal(data);
	}
	/**
	 * 解密
	 * @param data 密文
	 * @param key
	 * @return 明文、原文
	 * @throws Exception
	 */
	public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
		Key k = toKey(key);
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_ECB);
		cipher.init(Cipher.DECRYPT_MODE, k, new SecureRandom());
		return cipher.doFinal(data);
	}
}

相關推薦

Java加密演算法DES

金鑰加密也稱為對稱加密,速度快,但加密和解密的鑰匙必須相同,只有通訊雙方才能知道鑰匙 package com.stone.security; import java.security.Key; import java.security.SecureRandom; im

Java常用對稱加密演算法-DES

直接上程式碼import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.security.SecureRandom; impo

加密演算法總結 加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用

加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用 加密技術通常分為兩大類:"對稱式"和"非對稱式"。 對稱性加密演算法:對稱式加密就是加密和解密使用同一個金鑰。資訊接收雙方都需事先知道密匙和加解密演算法且其密匙是相同的,之後便是對資料進行加解密了。對稱加密演算法用

加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用, 各種加密演算法比較

加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用 - sochishun - 部落格園 https://www.cnblogs.com/sochishun/p/7028056.html     加密演算法(DES,AES,RSA,MD

java加密演算法BASE64&MD5&SHA

1、BASE64 Base64定義:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary s

JAVA加密演算法(1)- 密碼學概述及BASE64演算法使用

密碼學綜述 密碼學綜述 密碼學基本功能 機密性、鑑別、報文完整性、不可否認性 基本模型 sender-->加密演算法 --> 密文 --> 解密演算法 --> receiver 金鑰源 密碼學演算法分類: 訊息編碼:Base64 訊息

對稱加密演算法-DES,3DES,AES

1.jdk與bc實現DES演算法: package com.samlai.security; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.sec

各種Java加密演算法2

    來源 :http://www.open-open.com/lib/view/open1397274257325.html BASE64的加密解密是雙向的,可以求反解。     MD5、SHA以及HMAC是單向加密,任何資料加密後只會產生唯一的一個加密串,通常用來

加密演算法------DES加密演算法詳解

一、加密演算法的分類1.對稱加解密演算法a.通訊雙方同時掌握一個金鑰,加密解密都是由一個金鑰完成的(即加密金鑰等於解密金鑰,加解密金鑰可以相互推倒出來)。b.雙方通訊前共同擬定一個金鑰,不對第三方公開。c.不具有個體原子性,一個金鑰被共享,洩漏機率增大2.公私鑰加解密演算法a

java加密演算法非對稱加密演算法——數字信封 DH

類似數字簽名,數字信封是這樣描述的:  數字信封          數字信封用加密技術來保證只有特定的收信人才能閱讀信的內容。  流程:      資訊傳送方採用對稱金鑰來加密資訊,然後再用接收方的公鑰來加密此對稱金鑰(這部分稱為數字信封),再將它和資訊一

java 加密演算法 base64 以及 自定義 加解密

import sun.misc.BASE64Decoder; public class Base64Utils {    public static String getBASE64(byte[] b) {   String s = null;   if (b !=

加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用

1.加密演算法分類 加密技術通常分為兩大類:”對稱式”和”非對稱式”。 1.1對稱性加密演算法: 對稱式加密就是加密和解密使用同一個金鑰。資訊接收雙方都需事先知道密匙和加解密演算法且其密匙是相同的,之後便是對資料進行加解密了。對稱加密演算法用來對敏感資

JAVA加密演算法(DH)

接下來我們分析DH加密演算法,一種適用於網路互動的加密演算法。 DH Diffie-Hellman演算法(D-H演算法),金鑰一致協議。是由公開金鑰密碼體制的奠基人Diffie和Hellman所提出的一種思想。簡單的說就是允許兩名使用者在公開媒體上交換資訊以生成"一致"的、可

分組對稱金鑰加密演算法——DES、3DES(DESede 或 TDES)、AES

一、常用的 "分組對稱金鑰加密演算法" 分為以下3種 (1)DES(Data Encryption Standard,標準加密演算法)   1977年1月,美國政府頒佈:採納IBM公司設計的方案作為非機密資料的正式資料加密標準(DES Data Encryption Sta

對稱加密演算法——DES演算法(python實現)

一、DES演算法描述         DES演算法總的說來可以兩部分組成: 1、對金鑰的處理。這一部分是把我們用的64位金鑰(實際用的56位,去掉了8個奇偶校驗位)分散成16個48位的子金鑰。 2、對資料的加密。通過第一步生成的子金鑰來加密我們所要加密的資料,最終生成密文。 下面就通過這兩

Java加密演算法(MD5、SHA-1)

1.MD5演算法(Message Digest Algorithm 5) 可以保證資料傳輸完整性和一致性 摘要後長度為16位元組 摘要資訊中不包含原文資訊,所有加密結果不可逆(無法解密) 一般在傳送檔案時 對原始檔進行md5 hash 傳送到對方後 檢測hash值是否相等 如

MD5帶鹽值的java加密演算法

        我們直接看一張圖:         不知看後,會有何感觸。現在的MD5密碼資料庫的資料量已經非常龐大了,大部分常用密碼都可以通過MD5摘要反向查詢到密碼明文。為了防止內部人員(能夠接觸到資料庫或者資料庫備份檔案的人員)和外部入侵者通過MD5反查密碼明文,更

計算機網路安全 —— 對稱加密演算法 DES (一)

一、對稱加密演算法概念        我們通過計算機網路傳輸資料時,如果無法防止他人竊聽, 可以利用密碼學技術將傳送的資料變換成對任何不知道如何做逆變換人都不可理解的形式, 從而保證了資料的機密性。這種變換被稱為加密( encryption),被加密的資料被稱為密 文(

DES加密演算法java實現(基於java類庫)

嗯嗯........這個是我新開的部落格上的第一篇的文章,這裡小白希望自己的技術能夠一天比一天好(p≧w≦q),加油! 好吧,現在來一個基於java類庫的DES加密演算法的實現吧~網上不少的程式碼要不執行有問題,要不就是簡簡單單內建一個固定的加密字串就簡單完事了。好吧,我承認我現在是為懶人服務

Des 加密演算法java工具類

package com.lock.demo.service; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.SecretKey; import ja