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密碼的金鑰長度變