首页 > 解决方案 > 导出用spring boot加密的json

问题描述

在我的系统上人们的数据应该通过 json 导出到基于 Rest 的系统,post body 有效负载应该被加密......因为我对 rest 和 springboot 的了解很少我不知道我是否做对了...... 。我想不是。* 我正在使用 jooq

在这里我正在寻找人员并返回人员列表

       Result<Record> result = ctx.select()
                .from(PERSON)
                .orderBy(PERSON.NUM)
                .fetch();

        for (Record r : result) {
            Integer lNum = r.getValue(PERSON.NUM);
            String name = r.getValue(PERSON.SNOME);
            String rm = r.getValue(PERSON.SRM);

            personDto = new AlunoDto();
            personDto.setlNum(num);
            personDto.setsNome(name);
            personDto.setsRm(rm);
            personList.add(personDto);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    **return personList;**

在我的 PersonController 中,我获取人员列表并将步骤作为转换为 json 并加密的方法的参数

@RequestMapping(value = "/person", method = RequestMethod.GET)
public String getAllPerson(){
    try {
       personsEncypted= convertToJson(personList);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
   return personsEncypted;
}

   public String  convertToJson(List obj) throws JsonProcessingException {

    ObjectMapper mapper = new ObjectMapper();
    String onInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);

    String key = "00000000000000000000000000"; 
    String personEncrypted= encrypt(key, jsonInString);
    return personEncrypted;
}

public static String encrypt(String key, String value) {
    try {

   SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.ENCRYPT_MODE,skeySpec);
        byte[] encrypted = cipher.doFinal(value.getBytes());

        return Base64.encodeBase64String(encrypted);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return null;
}

在浏览器中点击地址是数据的显示方式 在此处输入图像描述

对方会消费数据吗?太感谢了...

标签: javajsonspring-boot

解决方案


不,这是行不通的。

简单的解决方案是使用 TLS(HTTPS)。不需要加密代码,只需在您的 java web 服务器或服务器前端的负载平衡器中进行一些配置,如 apache2 或 nginx。

即使 http 客户端正在合作,像 AES 这样的对称算法也不起作用。客户端需要知道相同的密钥。


推荐阅读