weixin_44711946 2023-07-18 09:09 采纳率: 75%
浏览 57
已结题

现在前后端对接都是明文json,需要加密后传一个字符串,这应该怎么实现,提醒说要注意加密后的字符串长度

现在前后端对接都是明文json,需要加密后传一个字符串,这应该怎么实现,提醒说要注意加密后的字符串长度

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-18 10:23
    关注
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7515662
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:怎样在前端遍历后端服务器传递来的json字符串中的集合?
    • 除此之外, 这篇博客: 【个人博客项目 4】自定义全局返回类型模板、自定义全局异常,并以json形式返回在页面中的 首先添加全局的信息返回格式 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 自定义一个全局的返回格式,使返回结果更加规范化,前后端联调的时候能够更加轻松

    • 您还可以看一下 黄菊华老师的微信小程序Json数据使用专题课程中的 微信小程序入门到就业课(全栈课)学习说明【建议看下】小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      在前后端对接时对明文JSON进行加密并传输,可以使用对称加密算法和密钥来实现。具体步骤如下:

      1. 生成密钥:选择一个长度合适的密钥(比如128位),可以使用随机数生成器生成一个随机的密钥,并将其保存。
      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();
      
      1. 加密明文JSON:使用AES对称加密算法,使用生成的密钥对明文JSON进行加密。
      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);
      
      1. 传输加密后的字符串:将加密后的字符串传输给后端。

      2. 后端解密:后端使用相同的密钥和加密算法对接收到的加密字符串进行解密。

      // 解密加密字符串
      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进行加密并传输的具体解决方案。如果您还有其他问题或需要进一步的帮助,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 7月18日