日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现对称加密

發布時間:2023/12/20 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现对称加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.Cipher實現對稱加密
public class EncrypDES {// 字符串默認鍵值private static String strDefaultKey = "asdasdasdasdzcxczxczx";//加密工具private Cipher encryptCipher = null;// 解密工具private Cipher decryptCipher = null;/*** 默認構造方法,使用默認密鑰*/public EncrypDES() throws Exception {this(strDefaultKey);}/*** 指定密鑰構造方法* @param strKey 指定的密鑰* @throws Exception*/public EncrypDES(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);}/*** 將byte數組轉換為表示16進制值的字符串, 如:byte[]{8,18}轉換為:0813,和public static byte[]** hexStr2ByteArr(String strIn) 互為可逆的轉換過程** @param arrB 需要轉換的byte數組* @return 轉換后的字符串* @throws Exception 本方法不處理任何異常,所有異常全部拋出*/public static String byteArr2HexStr(byte[] arrB) throws Exception {int iLen = arrB.length;// 每個byte用2個字符才能表示,所以字符串的長度是數組長度的2倍StringBuffer sb = new StringBuffer(iLen * 2);for (int i = 0; i < iLen; i++) {int intTmp = arrB[i];// 把負數轉換為正數while (intTmp < 0) {intTmp = intTmp + 256;}// 小于0F的數需要在前面補0if (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數組*/public static byte[] hexStr2ByteArr(String strIn) throws Exception {byte[] arrB = strIn.getBytes();int iLen = arrB.length;// 兩個字符表示一個字節,所以字節數組長度是字符串長度除以2byte[] 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;}/**** 加密字節數組* @param arrB 需加密的字節數組* @return 加密后的字節數組*/public byte[] encrypt(byte[] arrB) throws Exception {return encryptCipher.doFinal(arrB);}/*** 加密字符串* @param strIn 需加密的字符串* @return 加密后的字符串*/public String encrypt(String strIn) throws Exception {return byteArr2HexStr(encrypt(strIn.getBytes()));}/*** 解密字節數組* @param arrB 需解密的字節數組* @return 解密后的字節數組*/public byte[] decrypt(byte[] arrB) throws Exception {return decryptCipher.doFinal(arrB);}/*** 解密字符串* @param strIn 需解密的字符串* @return 解密后的字符串*/public String decrypt(String strIn) throws Exception {return new String(decrypt(hexStr2ByteArr(strIn)));}/*** 從指定字符串生成密鑰,密鑰所需的字節數組長度為8位 不足8位時后面補0,超出8位只取前8位* @param arrBTmp 構成該字符串的字節數組* @return 生成的密鑰*/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;}public static void main(String[] args) {try {String msg1 = "hello Cipher";EncrypDES des1 = new EncrypDES();// 使用默認密鑰System.out.println("加密前的字符:" + msg1);System.out.println("加密后的字符:" + des1.encrypt(msg1));System.out.println("解密后的字符:" + des1.decrypt(des1.encrypt(msg1)));} catch (Exception e) {e.printStackTrace();}}}

運行main方法后得出結果是:

base64加解密
public class EncryptUtil {/*** BASE64解密* @throws Exception*/public static byte[] decryptBASE64(String key) throws Exception {return (new BASE64Decoder()).decodeBuffer(key);}/*** BASE64加密*/public static String encryptBASE64(byte[] key) throws Exception {return (new BASE64Encoder()).encodeBuffer(key);}public static void main(String[] args) throws Exception {String ss = "9899b43bbde94982b71efad47eed9f82-234234324-123456";String encryptBASE64 = encryptBASE64(ss.getBytes());System.out.println(encryptBASE64);byte[] bytes = decryptBASE64(encryptBASE64);System.out.println(new String(bytes));} }

運行main方法得出的:

總結

以上是生活随笔為你收集整理的Java实现对称加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。