现在前后端对接都是明文json,需要加密后传一个字符串,这应该怎么实现,提醒说要注意加密后的字符串长度
自定义一个全局的返回格式,使返回结果更加规范化,前后端联调的时候能够更加轻松
在前后端对接时对明文JSON进行加密并传输,可以使用对称加密算法和密钥来实现。具体步骤如下:
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
// 生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
// 加密明文JSON
String jsonString = "{\"field1\": \"value1\", \"field2\": \"value2\"}";
String algorithm = "AES";
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, algorithm);
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encryptedBytes = cipher.doFinal(jsonString.getBytes());
// 对加密后的字节数组进行Base64编码,得到加密后的字符串
String encryptedString = Base64.getEncoder().encodeToString(encryptedBytes);
传输加密后的字符串:将加密后的字符串传输给后端。
后端解密:后端使用相同的密钥和加密算法对接收到的加密字符串进行解密。
// 解密加密字符串
byte[] encryptedBytes = Base64.getDecoder().decode(encryptedString);
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
// 解密后的字节数组转换为字符串
String decryptedString = new String(decryptedBytes);
需要注意的是,加密后的字符串长度是根据明文的长度和加密算法决定的。对称加密算法一般保持加密后的长度与明文长度相同。如果需要考虑加密后的字符串长度问题,可以选择使用非对称加密算法(如RSA)对密钥进行加密,然后使用对称加密算法对数据进行加密。这样可以实现加密后的字符串长度相对较短。
以上是对明文JSON进行加密并传输的具体解决方案。如果您还有其他问题或需要进一步的帮助,请随时告诉我。
给前端说好 用什么加密方式 把整个参数都加密一下 你收到请求后 解密就行了