ToB企服应用市场:ToB评测及商务社交产业平台
标题:
java 字符转Base64然后加密
[打印本页]
作者:
守听
时间:
2023-4-6 20:54
标题:
java 字符转Base64然后加密
项目中常有需求要求不能明文传送某些关键字符,也许会被某些网关被拦截掉,那应该怎么解决这个问题呢?
字符串转 base64后的加密与解密
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
private static String KEY = "12345678901234567890abcd";
/**
* 加密
* @param str 字符
* @return
*/
public static String encodeToBase64ThenDecrypt(String str){
if(StringUtils.isBlank(str)) return "";
BASE64Encoder base64Encoder = new BASE64Encoder();
String encode = base64Encoder.encode(str.getBytes());
return TripleDes.encrypt3DES(encode, KEY);
}
/**
* 解密
* @param decry 字符
* @return
*/
public static String decodeToBase64ThenDecrypt(String decry) {
if(StringUtils.isBlank(decry)) return "";
String base64Str = TripleDes.decrypt3DES(decry, KEY);
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] bytes = new byte[0];
try {
bytes = base64Decoder.decodeBuffer(base64Str);
} catch (IOException e) {
e.printStackTrace();
}
return new String(bytes);
复制代码
TripleDes 3DES加密算法文件代码<br>
复制代码
package com.lanwf.utils;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.StringUtils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* 采用3DES加密,单des密钥是8字节,三重des密钥就是3*8=24字节,更加安全
* 即密钥必须是24位
*/
public class TripleDes {
private TripleDes(){}
private static Cipher DES_CIPHER;
static {
try {
DES_CIPHER = Cipher.getInstance("DESede/ECB/PKCS5Padding");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密
* @param str 明文字符串
* @param key 密钥(必须24位)
* @return
*/
public static String encrypt3DES(String str, String key) {
if(StringUtils.isBlank(str))return null;
try {
DES_CIPHER.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DESede"));
byte[] encryptedData = DES_CIPHER.doFinal(str.getBytes("utf-8"));
//转化为字符串
return Hex.encodeHexString(encryptedData).toUpperCase();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
* @param str 密码后的密文
* @param key 密钥(必须24位)
* @return
*/
public static String decrypt3DES(String str, String key) {
if(StringUtils.isBlank(str))return null;
try {
DES_CIPHER.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DESede"));
byte[] decryptedData = DES_CIPHER.doFinal(Hex.decodeHex(str.toCharArray()));
return new String(decryptedData, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
复制代码
完!!!
复制代码
* 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。<br>*<br>* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。<br>*<br>* 你可以按任意顺序返回答案。<br>* @param args<br>* 输入:nums = [2,7,11,15], target = 9<br>* 输出:[0,1]<br>* 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4