首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES加密算法及填充方案

AES加密算法及填充方案
EN

Stack Overflow用户
提问于 2022-06-15 10:21:50
回答 1查看 274关注 0票数 0

你好,目前,我必须做一个AES加密,并将它发送到外部西南,但我有麻烦的声纳。

这是我当前代码的相关部分:

代码语言:javascript
复制
String encriptedPad = afegir0Multiple8(Hex.encodeHexString(encriptar.getBytes()));
    String cadenaAmb0 = afegir0Multiple8(encriptar);  //Creem un cadena amb la longitut que necessitem
    byte[] cadenaRes = cadenaAmb0.getBytes();  //Cadena resultant per encriptar
    //Clau
    byte[] hexclaub = DatatypeConverter.parseHexBinary(claveCifradoRedsa);
    SecretKeySpec key = new SecretKeySpec(ArrayUtils.addAll(hexclaub,ArrayUtils.subarray(hexclaub,0,8)), "AES");

    //Vector Init
    String v = vectorInicial;
    IvParameterSpec ivectorSpecv = new IvParameterSpec(v.getBytes("UTF-8"));
    
    //Encriptem
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
    cipher.init(Cipher.ENCRYPT_MODE, key, ivectorSpecv);
    byte[] encrypted = cipher.doFinal(cadenaRes);       

是一个小西班牙人,因为它是回收旧代码(TripleDES),对不起。但我们可以得到的要点是,我们使用的是AES配置与AES/CBC/PKCS5PADDING

问题是,当我发送以下代码时,我们的sonarqube得到了这个输出:

有人能给我解释一下甲骨文的填充攻击吗?如果有影响的话,可以用声纳推荐的例子来解释吗?我完全迷上了加密技术

pd: SW已经接受了更改配置,但是我想理解为什么我必须使用一个特定的配置而不是其他的配置。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-20 11:25:56

这个问题已经解决了,多亏了下面评论中的@Topaco。为了回答这个问题,我将在这里更新我的代码。

我目前的代码如下:

代码语言:javascript
复制
@Override
public Map execute(Map in) throws Exception {
    log.info("********** CIFRADO AES ACTION ****************");
    Map params = (Map) in.get("request_params");
    Map resultado = new HashMap();
    resultado.put("clave", encriptarAES((String) in.get("encriptar"),(String) in.get("claveCifrado"),(String) in.get("vectorInicial")));
    return resultado;
}

private String encriptarAES(String encriptar, String claveCifradoRedsa, String vectorInicial) throws Exception {
    SecretKey key = new SecretKeySpec(claveCifradoRedsa.getBytes(), "AES");
    key =  new SecretKeySpec(key.getEncoded(), "AES");
    //Encriptem
    GCMParameterSpec ivParameterSpec = new GCMParameterSpec(128, vectorInicial.getBytes());

    Cipher cipher = Cipher.getInstance(instance);
    cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec);
    byte[] encrypted = cipher.doFinal(encriptar.getBytes());      
    String codificado64 = Base64.getUrlEncoder().encodeToString(encrypted);
    log.info(encriptar);
    log.info(codificado64);
    log.info("************************ FIN CIFRADO AES ACTION ***********************");
    return codificado64;
}

我认为这是AES加密的一个非常干净的例子,希望它对某些人有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72629693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档