1. 程式人生 > >JAVA 3DES 加解密篇

JAVA 3DES 加解密篇

學習筆記,JAVA 3DES 加解密學習

引入 bouncycastle-jce-jdk13-112.jar  [ 在我的資原始檔中可以進行下載 ]

import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class Double3DES {
	
	
	public static byte[] strToBCDBytes(String str,boolean isLeft) {		
		if( str == null || "".equals(str.replaceAll(" "," ").trim())){			
			return null;
		}
		int len = str.length();    
		int mod = len % 2;   

		if (mod != 0) {   
			if(isLeft){
				str =  str + "0";
			}else{
				str = "0" + str;
			}
			len = str.length();    
		}
		byte abt[] = new byte[len];    
		if (len >= 2) {    
			len = len / 2;    
		}
		byte bbt[] = new byte[len];    
		abt = str.getBytes();    
		int j, k;   

		for (int p = 0; p < str.length()/2; p++) {    
			if ( (abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {    
				j = abt[2 * p] - '0';    
			} else if ( (abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {    
				j = abt[2 * p] - 'a' + 0x0a;    
			} else {    
				j = abt[2 * p] - 'A' + 0x0a;    
			}
			if ( (abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {    
				k = abt[2 * p + 1] - '0';    
			} else if ( (abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {    
				k = abt[2 * p + 1] - 'a' + 0x0a;    
			}else {    
				k = abt[2 * p + 1] - 'A' + 0x0a;    
			}
			int a = (j << 4) + k;    
			byte b = (byte) a;    
			bbt[p] = b;    
		}    
		return bbt;    
	} 	
	
		
	private static byte uniteBytes(String src0, String src1) {
		byte b0 = Byte.decode("0x" + src0).byteValue();
		b0 = (byte) (b0 << 4);
		byte b1 = Byte.decode("0x" + src1).byteValue();
		byte ret = (byte) (b0 | b1);
		return ret;
	}

	
	/**
	 * 十六進位制字串轉換成bytes
	 * 
	 * @param src
	 * @return
	 */
	public static byte[] hexStr2Bytes(String src) {
		int m = 0, n = 0;
		int l = src.length() / 2;
		byte[] ret = new byte[l];
		for (int i = 0; i < l; i++) {
			m = i * 2 + 1;
			n = m + 1;
			ret[i] = uniteBytes(src.substring(i * 2, m), src.substring(m, n));
		}
		return ret;
	}
	
	public static String byte2HexStr(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1)
				hs = hs + "0" + stmp;
			else
				hs = hs + stmp;
		}
		return hs.toUpperCase();
	}
	
	/**
	 * 
	 * @param mainKey  主金鑰
	 * @param plainKey 
	 * @param isEncry true 表示加密   false 表示解密
	 * @return
	 */
	public static String desOrEncryptKey(String mainKey,String plainKey,boolean isEncry){  
        String descryptKey = "";  
        try{  
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());   
            String Algorithm = "DESede/ECB/NoPadding";   
            byte[] hb = strToBCDBytes(mainKey, true);                     
            byte[] k = new byte[24];  
            System.arraycopy(hb,0,k,0,16);  
            System.arraycopy(hb,0,k,16,8);    
            SecretKey deskey = new SecretKeySpec(k, Algorithm);  
            Cipher c1 = Cipher.getInstance(Algorithm);  
            if(isEncry){
            	c1.init(Cipher.ENCRYPT_MODE, deskey);
            }else{
            	c1.init(Cipher.DECRYPT_MODE, deskey); 
            }
            descryptKey = byte2HexStr((c1.doFinal(hexStr2Bytes(plainKey))));  
        }catch(Exception e){  
           e.printStackTrace();
        }  
        return descryptKey;  
    }
	
	
	/**
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		//加密
		System.out.println("\tencryp:::: "+desOrEncryptKey("11111113111111710123456789ABCDEF","ADF55D08B48B18E3BDF55D08D48B18E3",true));
		//解密
		System.out.println("\tdescryp:::: "+desOrEncryptKey("11111113111111710123456789ABCDEF","ADF55D08B48B18E3BDF55D08D48B18E3",false));
	}
	
}



相關推薦

JAVA 3DES 解密

學習筆記,JAVA 3DES 加解密學習 引入 bouncycastle-jce-jdk13-112.jar  [ 在我的資原始檔中可以進行下載 ] import java.security.Security; import javax.crypto.Cipher;

java 3des解密

加解密的擴充套件類:    import javax.crypto.Cipher;     import javax.crypto.SecretKey;     import javax.crypto.spec.SecretKeySp

java 3DES 解密

package com.mm.util; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.Se

Java學習之3DES解密

/** * CBC加密 * @param key 金鑰 3 * 8位 * @param keyiv IV 8位 * @param data 明文 * @return Base64編碼的密文 *

java rsa解密算法的實現

binary 0x03 object sat ear exc triple turn create RSAUtils:RSA加解密的實現 package com.rsa.test; import java.io.ByteArrayOutputStream; import

PHP 3DES 解密(CBC模式,pkcs5padding填充)

ner ech scm blog input 3des解密 tde 結合 rip 1、前言:項目中接入第三方支付遇到3DES加密,以前也沒用過,搜了好多,都不適用,各種不對,後來自己結合搜到的終於弄正確了,檢測地址:http://tool.chacuo.net/crypt3

C# AESCBC256 與 java AESCBC256 解密

created key rom post base bsp return block padding 和某上市公司對接接口,他們試用 java AES CBC PKCS5 256 加解密。網上C# 基本不合適。 註意:C# PKCS7 對應 java PKCS5 ///

3DES解密演算法

在日常設計及開發中,為確保資料傳輸和資料儲存的安全,可通過特定的演算法,將資料明文加密成複雜的密文。目前主流加密手段大致可分為單向加密和雙向加密。   單向加密:通過對資料進行摘要計算生成密文,密文不可逆推還原。演算法代表:Base64,MD5,SHA;   雙向加密:與單向加密相

3DES解密工具類

package test; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESede

golang desede(3des)解密

package main import ( "bytes" "crypto/cipher" "crypto/des" "encoding/base64" "encoding/hex" "fmt" "strings" ) cons

java rsa解密

簡單實用java實現rsa加解密,java內部使用pkcs8格式私鑰,openssl預設為pkcs1私鑰,注意格式 maven專案 //pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

Java Base64 解密

public class base64EncryAndDecry { public static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; public sta

DES與3DES解密

一、DES和3DES的概念 二、需求背景        我們在線上經常使用DES加密使用者id,以下簡稱(encodeId),後端傳個前端,前端會使用localStorage儲存encodeId,然後呼叫介面時將encodeId作為入參,後端通過e

java Aes解密

java中加AES解密的方式比較簡單,本示例展示CBC模式AES在java中的加解密 import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.IvParamete

Spring 介面資料解密---全域性解密

Spring 介面資料加解密—全域性加解密篇 資料加密傳輸 加解密處理 自定義message-converters 小結 資料加密傳輸 企業級開發,是缺少不了資料的加密傳輸。如若不是,請自重。微信公共號的開發便提供AES加密處理,提高公共號的安全性

Java☞DES解密演算法簡介及實現

Java加密解密之對稱加密演算法DES   資料加密演算法(Data Encryption Algorithm,DEA)是一種對稱加密演算法,很可能是使用最廣泛的金鑰系統,特別是在保護金融資料的安全中,最初開發的DEA是嵌入硬體中的。通常,自動取款機(Aut

3Des解密,壓縮檔案

import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; import javax.crypto.SecretKey;

JAVA 3DES加密/解密

3DES(或稱為Triple DES)是三重資料加密演算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當於是對每個資料塊應用三次DES加密演算法。由於計算機運算能力的增強,原版DES密碼的金鑰長度變得容易被暴

Java 3DES加密解密(Commons.Codec Base64)

依賴包import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.binary.Base64;演算法程式碼 /** * 轉換成十六進位制字串 * @

openssl 3des 解密

一. 3DES加密原理 3DES(或稱為Triple DES)是三重資料加密演算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當於是對每個資料塊應用三次DES加密演算法。由於計算機運算能力的增強,原版DES密碼的金鑰長度變