请问pb2019的json发送数据时,对方需要对发送的json数据进行带 key 的加密,他们的加密方式例子大致见下面:
///////////////////////////////
加密示例代码
String param = AesUtils.encrypt(参数json字符串, KEY);
解密示例代码
String decrypSre = AesUtils.decryptToken(param, KEY));
加密工具类代码
public class AesUtils {
private static final Log log = Log.get();
private static final String ALGORITHM = "AES";
public static void main(String[] args) {
String cltk = "{\n" +
" \"vesselName\": \"xxx\",\n" +
" \"voyage\": \"xxx\"\n" +
"}";
String key = "JJ2CQ_903DAAAE7A8387E7379684BC013085CC";
String encrypt = encrypt(cltk, key);
log.info("加密后:" + encrypt.length() + " " + encrypt);
String decryptToken = decryptToken(encrypt, key);
log.info("解密后:" + decryptToken);
}
/**
* 加密
*/
public static String encrypt(String str, String password) {
try {
byte[] enCodeFormat = getSecretKey(password);
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
// 创建密码器
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
byte[] byteContent = str.getBytes("UTF-8");
// 初始化
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(byteContent);
// 加密
return Base64.encode(result);
} catch (Exception e) {
log.error("encrypt password failed, ", e);
}
return null;
}
/**
* 加密,去除特殊字符
*/
public static String encryptExcludeSpecialChars(String str, String password) {
try {
byte[] enCodeFormat = getSecretKey(password);
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
// 创建密码器
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
byte[] byteContent = str.getBytes("UTF-8");
// 初始化
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(byteContent);
return new String(result);
} catch (Exception e) {
log.error("encrypt password failed, ", e);
}
return null;
}
/**
* 解密
*/
public static String decryptToken(String str, String password) {
log.info("解密密文:{},秘钥:{}", str, password);
// 长token解密得到明文token
String realToken = "";
try {
realToken = decryptEcb(str, password);
} catch (Exception e) {
log.error("decrypt password failed, ", e);
}
log.info("解密明文:{}", realToken);
return realToken;
}
/**
* 解密,没有特殊字符情况下
*/
public static String decryptExcludeSpecialChars(String str, String password) {
log.info("解密密文:{},秘钥:{}", str, password);
String decryptStr = "";
try {
decryptStr = decryptEcbExcludeSpecialChars(str, password);
} catch (Exception e) {
log.error("decrypt password failed, ", e);
}
log.info("解密明文:{}", decryptStr);
return decryptStr;
}
private static String decryptEcb(String data, String key) throws Exception {
if (ObjectUtil.isEmpty(key) || key.length() < 16) {
return null;
}
byte[] decryptdata = Base64.decode(data);
byte[] skey = getSecretKey(key);
// 解密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, toKey(skey));
byte[] result = cipher.doFinal(decryptdata);
return new String(result);
}
private static String decryptEcbExcludeSpecialChars(String data, String key) throws Exception {
if (ObjectUtil.isEmpty(key) || key.length() < 16) {
return null;
}
byte[] decryptdata = data.getBytes("UTF-8");
byte[] skey = getSecretKey(key);
// 解密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, toKey(skey));
byte[] result = cipher.doFinal(decryptdata);
// 转化为字符串
return new String(result);
}
private static byte[] getSecretKey(String key) throws UnsupportedEncodingException {
return key.substring(0, 16).getBytes("UTF-8");
}
private static Key toKey(byte[] key) throws IllegalArgumentException {
return new SecretKeySpec(key, ALGORITHM);
}
/////////////////
请问下,那我们pb 在发送json数据过去 也要进行 key 方式加密,那pb 怎样处理呢? 能给个例子吗?
谢谢