Java簡單數(shù)據(jù)加密方法DES實(shí)現(xiàn)過程解析
這篇文章主要介紹了Java簡單數(shù)據(jù)加密方法DES實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
1.數(shù)據(jù)在網(wǎng)絡(luò)中傳輸時(shí),需要進(jìn)行加密處理
雙方約定一個(gè)相同的key(key不在網(wǎng)絡(luò)中進(jìn)行傳輸,只傳輸加密數(shù)據(jù)),然后根據(jù)將key根據(jù)一定的DES規(guī)則轉(zhuǎn)換,得到真正的key,在進(jìn)行加密和解密,為了增加安全性,加密過程中再加上編碼base64轉(zhuǎn)換,解密時(shí)先解碼base64
加密和解密的完整的代碼:
package com.cmit.hall.plat.play.utils;
import java.security.GeneralSecurityException;
import java.security.Key;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
/**
* 數(shù)據(jù)加密 DES方式 + Base64
* @author sun_flower
*
*/
public class EncryUtils {
public static final String KEY = "gEpCIKFVdPEBJ1pM5pLSviM2Nrj5C/A4iAw8ou+jiJpnrXigolapdcJXfmh2tECyuQnaFrvZHabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn";
/**
* 測試
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Key convertSecretKey = generateSecret(KEY);
String data = "{\"code\":\"100\",\"roleId\":[],\"userDesc\":\"測試\",\"sessionId\":\"90EA80C89F6187BAB363C9347F759E39\",\"roleList\":[],\"userName\":\"chenpeng\",\"checkCode\":\"\",\"token\":\"\",\"password\":\"eFEBcXRwTW2oMFSDwGwUKQ==\",\"createTime\":\"2019-05-27 15:30:14\",\"levelId\":\"1\",\"staffName\":\"\",\"id\":1502,\"userType\":\"1\",\"oldPwd\":\"\"}";
String enStr = encodeString(convertSecretKey, data);
decodeString(convertSecretKey, enStr);
}
/**
* 轉(zhuǎn)換key
* @param key
* @return
* @throws GeneralSecurityException
*/
public static Key generateSecret(String key) throws GeneralSecurityException {
byte[] bytesKey = key.getBytes();
DESKeySpec desKeySpec = new DESKeySpec(bytesKey);//實(shí)例化DESKey秘鑰的相關(guān)內(nèi)容
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");//實(shí)例一個(gè)秘鑰工廠,指定加密方式
Key convertSecretKey = factory.generateSecret(desKeySpec);
return convertSecretKey;
}
/**
* 加密
* @param convertSecretKey
* @param date
* @return
* @throws GeneralSecurityException
*/
public static String encodeString(Key convertSecretKey, String data) throws GeneralSecurityException {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//通過Cipher這個(gè)類進(jìn)行加解密相關(guān)操作
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] enData = Base64.getEncoder().encode(data.getBytes());
byte[] result = cipher.doFinal(enData);//輸入要加密的內(nèi)容
System.out.println("加密的結(jié)果:" + Hex.encodeHexString(result));
return Hex.encodeHexString(result);
}
/**
* 解密
* @param convertSecretKey
* @param date
* @return
* @throws GeneralSecurityException
* @throws DecoderException
*/
public static String decodeString(Key convertSecretKey, String data) throws GeneralSecurityException, DecoderException {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//通過Cipher這個(gè)類進(jìn)行加解密相關(guān)操作
cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
byte[] hdata = Hex.decodeHex(data.toCharArray());
byte[] result = cipher.doFinal(hdata);
byte[] decode = Base64.getDecoder().decode(result);
System.out.println("解密結(jié)果:" + new String(decode));
return new String(decode);
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
欄 目:Java
下一篇:MyBatis執(zhí)行Sql的流程實(shí)例解析
本文標(biāo)題:Java簡單數(shù)據(jù)加密方法DES實(shí)現(xiàn)過程解析
本文地址:http://www.jygsgssxh.com/a1/Java/8890.html
您可能感興趣的文章
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)模擬時(shí)鐘
- 01-10利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能
- 01-10JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
- 01-10java基于poi導(dǎo)出excel透視表代碼實(shí)例
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘
- 01-10基于Java驗(yàn)證jwt token代碼實(shí)例
- 01-10java實(shí)現(xiàn)液晶數(shù)字字體顯示當(dāng)前時(shí)間
- 01-10淺談Java中真的只有值傳遞么
- 01-10Java動(dòng)態(tài)顯示當(dāng)前日期和時(shí)間
- 01-10如何解決線程太多導(dǎo)致java socket連接池出現(xiàn)的問題


閱讀排行
本欄相關(guān)
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)模擬時(shí)鐘
- 01-10Springboot中@Value的使用詳解
- 01-10JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
- 01-10利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘
- 01-10java基于poi導(dǎo)出excel透視表代碼實(shí)例
- 01-10java實(shí)現(xiàn)液晶數(shù)字字體顯示當(dāng)前時(shí)間
- 01-10基于Java驗(yàn)證jwt token代碼實(shí)例
- 01-10Java動(dòng)態(tài)顯示當(dāng)前日期和時(shí)間
- 01-10淺談Java中真的只有值傳遞么
隨機(jī)閱讀
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置


