当前位置: 首页 > 知识库问答 >
问题:

搜狐.密码在解密模式下返回空数组

单展
2023-03-14

我自己在实现CBC模式。我用AES作为每个CBC块的E函数。

这是我的加密代码:

public static List<Byte> encrypt(List<Byte> bytes, byte[] key) throws Exception {
    byte[] bytesArray = BytesConverter.toByteArray(bytes);

    SecretKey secretKey = new SecretKeySpec(key, AES);

    Cipher cipher = Cipher.getInstance(AES);
    cipher.init(Cipher.ENCRYPT_MODE, secretKey);

    return BytesConverter.toByteList(cipher.update(bytesArray));
}

我使用update是因为我不想添加AES pad。我自己在CBC算法开始时为最后一个块做这件事。

当我想解密密文块时,我使用与Cipher.DECRYPTION_MODE相同的功能。

public static List<Byte> decrypt(List<Byte> bytes, byte[] key) throws Exception {
    byte[] bytesArray = BytesConverter.toByteArray(bytes);

    SecretKey secretKey = new SecretKeySpec(key, AES);

    Cipher cipher = Cipher.getInstance(AES);
    cipher.init(Cipher.DECRYPT_MODE, secretKey);

    return BytesConverter.toByteList(cipher.update(bytesArray));
}

问题是,Cipher.update在解密模式下返回空字节数组的输入是由加密方法加密。

我很困惑。怎么了?

共有1个答案

哈涵容
2023-03-14

您错过了对< code>doFinal的调用。由于ECB和CBC模式加密的填充,需要< code>Cipher实例来缓冲大小为- 1字节的块,只有在< code>doFinal()调用中才会填充和加密(或解密和未填充),这将释放密文的最后一部分(或用于解密的明文)。

您应该做的是使用“AES/ECB/NoPadding”,并且仅使用doFinal而不是update来实现每个块的CBC(尽管仅使用update也可以工作,但并不是100%指定它应该工作)。这与底层AES密码的块加密相同。您还可以使用Bouncy Castle的较低级别、轻量级(即:直接、非JCE)API,该API提供仅实现块密码本身的AES引擎。

 类似资料:
  • 这样,从加密消息中扫描进来的第一个字母将对应于换位槽中的第三个槽,这将是它被打印出来的地方。然而,我不知道如何将我的想法转化为代码。 电流换位加密密码: 非常基本的换位解密程序

  • 问题内容: 我正在加密用于登录的密码,它可以正常工作,但是我在Google Play控制台中收到一条警告,该如何删除它? 我正在android studio上尝试。 问题答案: 主要问题是您使用的密码没有完整性,并且使用了硬编码的加密密钥。如果使用“ 查找安全性错误”来分析源,则会收到CIPHER_INTEGRITY和HARD_CODE_KEY警告: 解决方案是使用包含基于哈希的消息认证码(HMA

  • 斯瓦格-spring狐狸-隐藏密码。 在我们的一个API中,我需要在验证用户id和密码后返回字母数字代码。 我们正在使用springfox-swagger-ui-2.3.1。我有一个字段“password”,当用户在swagger UI中键入时,我不想显示password(相反,我想显示“xxxx”)。 password定义为@RequestParam(value=“password”)字符串密码

  • 问题内容: 我有一个看起来像这样: 到目前为止,我所有的验证都在模式中进行,我想知道如何通过密码验证来实现这一点。用户在两个字段中输入密码,并且模型应检查它们彼此是否相同。 这种验证是否属于架构?我是这种验证的新手。 我应该如何验证密码? 问题答案: 我最终发现,您可以结合使用 虚拟路径 和 函数来实现此目的(如本要点所示),以达到与密码匹配相同的目的: https //gist.github.c

  • 本文向大家介绍详解 PHP加密解密字符串函数附源码下载,包括了详解 PHP加密解密字符串函数附源码下载的使用技巧和注意事项,需要的朋友参考一下 项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。 下面先给大家展示下效果图,感兴趣的朋友继续阅读全文。 效果演示     源码下载 笔者收录

  • 问题内容: 我想用Java加密和解密密码,然后以加密形式存储到数据库中。如果它是开源的,那就太好了。有什么建议/建议吗? 问题答案: 编辑 :这个答案是旧的。现在 不建议 使用MD5,因为它很容易被破坏。 我想象中的MD5必须足够好?您可以使用MessageDigest实现它。 这里还列出了其他算法。 如果确实需要,这是它的第三方版本: Fast MD5