1. 程式人生 > >des加密和解密

des加密和解密

package test;

import java.security.Key;
import java.security.Security;

import javax.crypto.Cipher;

/**
 * DES加密和解密工具,可以對字串進行加密和解密操作 。
 * 
 * @author 碼靈
 *       2017-10-17
 */
public class DesUtils {

	/** 字串預設鍵值 */
	private static String strDefaultKey = "national";

	/** 加密工具 */
	private Cipher encryptCipher = null;

	/** 解密工具 */
	private Cipher decryptCipher = null;

	/**
	 * 將byte陣列轉換為表示16進位制值的字串, hexStr2ByteArr(String strIn) 互為可逆的轉換過程
	 * 
	 * @param arrB
	 *            需要轉換的byte陣列
	 * @return 轉換後的字串
	 * @throws Exception
	 *             本方法不處理任何異常,所有異常全部丟擲
	 */
	public static String byteArr2HexStr(byte[] arrB) throws Exception {
		int iLen = arrB.length;
		// 每個byte用兩個字元才能表示,所以字串的長度是陣列長度的兩倍
		StringBuffer sb = new StringBuffer(iLen * 2);
		for (int i = 0; i < iLen; i++) {
			int intTmp = arrB[i];
			// 把負數轉換為正數
			while (intTmp < 0) {
				intTmp = intTmp + 256;
			}
			// 小於0F的數需要在前面補0
			if (intTmp < 16) {
				sb.append("0");
			}
			sb.append(Integer.toString(intTmp, 16));
		}
		return sb.toString();
	}

	/**
	 * 將表示16進位制值的字串轉換為byte陣列, 和public static String byteArr2HexStr(byte[] arrB)
	 * 互為可逆的轉換過程
	 * 
	 * @param strIn
	 *            需要轉換的字串
	 * @return 轉換後的byte陣列
	 * @throws Exception
	 *             本方法不處理任何異常,所有異常全部丟擲
	 * @author <a href="mailto:
[email protected]
">LiGuoQing</a> */ public static byte[] hexStr2ByteArr(String strIn) throws Exception { byte[] arrB = strIn.getBytes(); int iLen = arrB.length; // 兩個字元表示一個位元組,所以位元組陣列長度是字串長度除以2 byte[] arrOut = new byte[iLen / 2]; for (int i = 0; i < iLen; i = i + 2) { String strTmp = new String(arrB, i, 2); arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16); } return arrOut; } /** * 預設構造方法,使用預設金鑰 * * @throws Exception */ public DesUtils() throws Exception { this(strDefaultKey); } /** * 指定金鑰構造方法 * * @param strKey * 指定的金鑰 * @throws Exception */ public DesUtils(String strKey) throws Exception { Security.addProvider(new com.sun.crypto.provider.SunJCE()); Key key = getKey(strKey.getBytes()); encryptCipher = Cipher.getInstance("DES"); encryptCipher.init(Cipher.ENCRYPT_MODE, key); decryptCipher = Cipher.getInstance("DES"); decryptCipher.init(Cipher.DECRYPT_MODE, key); } /** * 加密位元組陣列 * * @param arrB * 需加密的位元組陣列 * @return 加密後的位元組陣列 * @throws Exception */ public byte[] encrypt(byte[] arrB) throws Exception { return encryptCipher.doFinal(arrB); } /** * 加密字串 * * @param strIn * 需加密的字串 * @return 加密後的字串 * @throws Exception */ public String encrypt(String strIn) throws Exception { return byteArr2HexStr(encrypt(strIn.getBytes())); } /** * 解密位元組陣列 * * @param arrB * 需解密的位元組陣列 * @return 解密後的位元組陣列 * @throws Exception */ public byte[] decrypt(byte[] arrB) throws Exception { return decryptCipher.doFinal(arrB); } /** * 解密字串 * * @param strIn * 需解密的字串 * @return 解密後的字串 * @throws Exception */ public String decrypt(String strIn) throws Exception { return new String(decrypt(hexStr2ByteArr(strIn))); } /** * 從指定字串生成金鑰,金鑰所需的位元組陣列長度為8位 不足8位時後面補0,超出8位只取前8位 * * @param arrBTmp * 構成該字串的位元組陣列 * @return 生成的金鑰 * @throws java.lang.Exception */ private Key getKey(byte[] arrBTmp) throws Exception { // 建立一個空的8位位元組陣列(預設值為0) byte[] arrB = new byte[8]; // 將原始位元組陣列轉換為8位 for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) { arrB[i] = arrBTmp[i]; } // 生成金鑰 Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES"); return key; } /** * main方法 。 * * @author 碼靈 * @param args */ public static void main(String[] args) { try { String test = "1234221356789"; DesUtils des = new DesUtils("2123231");// 自定義金鑰 System.out.println("加密前的字元:" + test); System.out.println("加密後的字元:" + des.encrypt(test)); System.out.println("解密後的字元:" + des.decrypt(des.encrypt(test))); System.out.println("解密後的字元:" + des.decrypt("084d3fec5438e5690be0c84742e51209")); } catch (Exception e) { e.printStackTrace(); } } }

所需jar包  http://download.csdn.net/download/h4241778/10025549

相關推薦

Java DES 加密解密源碼

ex18 detail r文件 index nco keyword [] 接口 crypto Java密碼學結構設計遵循兩個原則: 1) 算法的獨立性和可靠性。 2) 實現的獨立性和相互作用性。 算法的獨立性是通過定義密碼服務類來獲得。用戶只需了解密碼算法的概念,而不用

golang實現DES加密解密

package main import ( "bytes" "crypto/des" "crypto/cipher" "fmt" ) func padding(src []byte,blocksize int) []byte { n:=len(src) pad

[轉]DES加密解密工具類,可自定義key

import javax.crypto.Cipher; import java.security.Key; import java.security.Security; public class DesUtils { /** * 字串預設鍵

Java工具類——DES加密解密工具 II

import java.security.Key; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import

C#DES加密解密

原文地址 using System; using System.IO; using System.Text; using System.Globalization; using System.Collections.Generic; using System.Securi

des加密解密

package test; import java.security.Key; import java.security.Security; import javax.crypto.Cipher; /** * DES加密和解密工具,可以對字串進行加密和解密操作 。

Java DES 加密解密原始碼

Java密碼學結構設計遵循兩個原則: 1) 演算法的獨立性和可靠性。 2) 實現的獨立性和相互作用性。 演算法的獨立性是通過定義密碼服務類來獲得。使用者只需瞭解密碼演算法的概念,而不用去關心如何實現這些概念。實現的獨立性和相互作用性通過密碼服務提供器

對稱加密----AESDES加密解密

呼叫AES/DES加密演算法包最精要的就是下面兩句話:Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);CBC是工作模式,DES一共有電子密碼本模式(

des對稱加密解密

1.des對稱加密,是一種比較傳統的加密方式,其加密運算、解密運算使用的是同樣的金鑰,資訊的傳送者和資訊的接收者在進行資訊的傳輸與處理時,必須共同持有該對稱密碼,是一種對稱加密演算法。 2. ************** WHDesOperation.h檔案 //

什麽是私有密鑰密碼技術——密鑰加密算法采用同一把密鑰進行加密解密

解密 網絡安全 位操作 線性復雜 對稱 大量 控制 全局 相位 什麽是私有密鑰密碼技術 私有密鑰(Symmetric Key),又叫對稱密鑰。密鑰加密算法采用同一把密鑰進行加密和解密。它的優點是加密和解密速度非常快,但密鑰的分發和管理比較困難。信息的發送者和接收者必須明確同

關於簡單的加密解密算法

sss 建議 ace class 算法 dsm length pac data 加密解密 最簡單的就是簡單的字符串連接和運算,可是直接對字符串操作比較麻煩,所以建議一般做法是先把string轉換為byte數組後再進行簡單的異或運算或者其它運算進行加密和解密,終於比對

運維學習之加密解密

運維 網絡 安全 運維學習之加密與解密: 眾所周知,在網絡的世界裏不存在絕對的安全性。各種釣魚網站,病毒等等危害著我們的網絡環境。所以,作為一個運維人員,在我們利用網絡進行通信時,保證通信的機密性、完整性、可用性是必要的。 我們的日常生活中有以下三點威脅網絡安全的行為: 1.威脅

node加密解密字符串

string 引入 created require ring 地址 var final 變量 參考地址: http://www.cnblogs.com/laogai/p/4664917.html 第一步:引入模塊 var crypto = require(‘crypto‘)

使用Python進行AES加密解密

Coding color www tor 修改 1年 add 思想 href 摘錄於:http://blog.csdn.net/nurke/article/details/77267081 另外參考:http://www.cnblogs.com/kaituorensheng

shell整理(38)===凱撒加密解密

加密 凱撒 實現如下圖所示:[[email protected] shell]# bash zong.sh ==================凱撒加密解密============================== 1)輸入字符串,進行凱撒加密(輸入的字符串只能是字母、數字、空格) 2)已

JavaScript前端Java後端的AES加密解密

proto creat eight prop pen 保持 超出範圍 system creator 在實際開發項目中,有些數據在前後端的傳輸過程中需要進行加密,那就需要保證前端和後端的加解密需要統一。這裏給大家簡單演示AES在JavaScript前端和Java後端是如何實現

springcloud-加密解密

之前 endpoint soft security nload network class 處理器 end Spring Cloud具有一個用於在本地解密屬性值的Environment預處理器。它遵循與Config Server相同的規則,並通過encrypt.*具有相

密碼加密解密

加密 代碼 cnblogs void logs tint image () com 1.程序設計思路 設置兩個功能,加密和解密,加密時先算ASCII值,然後根據規則改變ASCII值,輸出對應的加密字符串,解密時,同樣算出字符串的ASCII,根據規則改變ASCII值,輸出對應

phpjava中的加密解密

padding 而不是 bsp enc openss 解密 div des算法 -c 遇到的java代碼如下: Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding"); 在php中使用des算法 始終校驗不

h5棋牌源碼租用Java的MD5加密解密

哈希函數 網絡問題 pri rgs update array 重要 和數 下載 理解MD5MD5的應用非常廣泛h5棋牌源碼租用(h5.hxforum.com)聯系170618633533企鵝2952777280(http://yhgj8004.com)源碼出售 房卡出售