gpt4 book ai didi

java - 如何获取 Cipher 的最大 key 大小

转载 作者:行者123 更新时间:2023-11-30 03:53:15 28 4
gpt4 key购买 nike

给定一个 javax.crypto.Cipher 对象,如何获取与其 init 方法一起使用的 key 长度?

我确实知道该对象是使用 Cipher.getInstance("AES/CBC/PKCS5Padding") 创建的,但我想从中进行抽象。

现在我的代码如下所示:

        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(keyString.toCharArray(), SALT, 256, 128);
byte[] encoded = factory.generateSecret(spec).getEncoded();
assert encoded.length*8 == 128;
Key rv = new SecretKeySpec(encoded, "AES");
Cipher cipher = Cipher.getInstance(CIPHER_MODE);
cipher.init(Cipher.DECRYPT_MODE, rv, new IvParameterSpec(IV_PARAMETER_SPEC));

我想用参数和从密码对象派生的“128”、“AES”常量值替换密码对象。

最佳答案

没有直接的方法可以做到这一点,而且这样做可能也不是一个好主意。某些密码可能具有非常短或非常长的 key ,但两者都没有多大用处。 RSA 甚至没有最大 key 大小,而最小 key 大小通常是不安全的。

有方法getMaxAllowedKeyLength但这可能只是返回 Integer.MAX_VALUE 而不是最大 key 大小(以位为单位)。它只能用于检查已知 key 长度是否受到限制。

如果您想使其可配置,最好将 key 大小作为属性/资源存储在某处。在我看来,抽象化这个决定并不是一个好主意。

关于java - 如何获取 Cipher 的最大 key 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23868231/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com