Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取密码';最大密钥大小_Java_Cryptography - Fatal编程技术网

Java 如何获取密码';最大密钥大小

Java 如何获取密码';最大密钥大小,java,cryptography,Java,Cryptography,给定一个javax.crypto.Cipher对象,如何获取用于其init方法的密钥长度 我确实知道该对象是用Cipher.getInstance(“AES/CBC/PKCS5Padding”)创建的,但我想从中抽象出来 现在,我的代码如下所示: SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); KeySpec spec = new PBEKeySpec(k

给定一个javax.crypto.Cipher对象,如何获取用于其init方法的密钥长度

我确实知道该对象是用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));

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

没有直接的方法可以做到这一点,这样做可能也不是一个好主意。有些密码可能有很短或很长的密钥,这两种密钥都不是很有用。RSA甚至没有最大密钥大小,最小密钥大小通常是不安全的

有一种方法,但它可能只返回
整数.MAX_值
,而不是以位为单位的最大密钥大小。它只能用于检查已知密钥长度是否受限制


如果要使密钥大小可配置,最好将其存储为某个属性/资源。在我看来,把这个决定抽象出来不是一个好主意。

阅读您想要使用的算法的文档,并编写一个类,该类根据最大密钥长度封装该算法的细节。

您试图实现什么?@TommyB我想在基于密码的对称加密算法中对加密算法进行参数化encryption/decryption.related:这仅适用于已知算法。问题是如何从算法中提取信息,使其成为可能未知的参数。我明白你的意思。唯一的关键是它无法完成,所以如果您想要封装algo和键长度的值,您必须自己提供。