Java簡(jiǎn)單數(shù)據(jù)加密方法DES實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java簡(jiǎn)單數(shù)據(jù)加密方法DES實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(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)行加密和解密,為了增加安全性,加密過(guò)程中再加上編碼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"; /** * 測(cè)試 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Key convertSecretKey = generateSecret(KEY); String data = "{\"code\":\"100\",\"roleId\":[],\"userDesc\":\"測(cè)試\",\"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");//通過(guò)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");//通過(guò)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); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python和Java進(jìn)行DES加密和解密的實(shí)例
- 詳解Android端與JavaWeb傳輸加密(DES+RSA)
- Java實(shí)現(xiàn)與JS相同的Des加解密算法完整實(shí)例
- Java實(shí)現(xiàn)的3des加密解密工具類示例
- Java實(shí)現(xiàn)的DES加密解密工具類實(shí)例
- Java使用Hutool實(shí)現(xiàn)AES、DES加密解密的方法
- java實(shí)現(xiàn)的DES加密算法詳解
- Java通過(guò)PropertyDescriptor反射調(diào)用set和get方法
- 詳解Java利用實(shí)現(xiàn)對(duì)稱加密(DES、3DES、AES)
相關(guān)文章
Java class文件格式總結(jié)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java class文件格式總結(jié)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-06-06java正則表達(dá)式的應(yīng)用 java讀取文件并獲取電話號(hào)碼
這篇文章主要介紹了java正則表達(dá)式的應(yīng)用,應(yīng)用的內(nèi)容是java讀取文件并獲取電話號(hào)碼,感興趣的小伙伴們可以參考一下2015-11-11Java 入門(mén)圖形用戶界面設(shè)計(jì)之單選按鈕
圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺(jué)上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的單選按鈕2022-02-02maven的settings.xml、pom.xml配置文件使用詳解
本文詳解了Maven中的配置文件settings.xml和pom.xml,闡述了它們的作用、配置項(xiàng)以及優(yōu)先級(jí)順序,settings.xml存在于Maven安裝目錄和用戶目錄下,分別作用于全局和當(dāng)前用戶,pom.xml位于項(xiàng)目根路徑下2024-09-09maven配置多個(gè)倉(cāng)庫(kù)的實(shí)現(xiàn)
本文主要介紹了maven配置多個(gè)倉(cāng)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01JAVA8如何妙用Optional解決NPE問(wèn)題詳解
在Java中,null代表一個(gè)不存在的對(duì)象,如果對(duì)它進(jìn)行操作就會(huì)拋出java.lang.NullPointerException異常,下面這篇文章主要給大家介紹了關(guān)于JAVA8如何妙用Optional解決NPE問(wèn)題的相關(guān)資料,需要的朋友可以參考下2018-06-06RabbitMQ中Confirm消息確認(rèn)機(jī)制保障生產(chǎn)端消息的可靠性詳解
這篇文章主要介紹了RabbitMQ中Confirm消息確認(rèn)機(jī)制保障生產(chǎn)端消息的可靠性詳解,生產(chǎn)者將數(shù)據(jù)發(fā)送到 RabbitMQ 的時(shí)候,可能數(shù)據(jù)就在半路給搞丟了,因?yàn)榫W(wǎng)絡(luò)問(wèn)題啥的,都有可能,需要的朋友可以參考下2023-12-12Java編程long數(shù)據(jù)類型的使用問(wèn)題
這篇文章主要介紹了Java編程數(shù)據(jù)類型long的使用問(wèn)題,涉及長(zhǎng)整型數(shù)據(jù)的取值范圍和不同整數(shù)類型的表示方法,需要的朋友可以參考下2017-09-09