AES 自定义密钥而不是 16、24 或 32 字节

AES custom key instead of 16, 24 or 32 bytes

我在 Java

中遇到 keys AES 的问题

这是我的代码:

public Core(String key) {
    try {
        this.SecretKey = key;
        this.ivspec = new IvParameterSpec(this.iv.getBytes());
        this.keyspec = new SecretKeySpec(SecretKey.getBytes("UTF-8"), "AES");
        try {
            this.cipher = Cipher.getInstance("AES/CBC/NoPadding");
        } catch (Exception e) {
            e.printStackTrace();
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

每当我传递包含例如 Pizza 的字符串 "key" 时,它只会生成错误。例如,当我传递一个恰好包含 16 个字节的字符串时,它就可以工作。我想使用 AES,但我不希望它仅限于 16、24 或 32 字节。我怎样才能解决这个问题?

对于具有不同密钥大小(和不同块大小)的 AES,请查看 Rijndael。但是,考虑到您使用 "Pizza" 作为键,使用 Rijndael 对您来说可能太高级了。而是使用 Key Derivation Function (KDF) 将您的密码 ("Pizza") 转换为加密密钥。如果您不确定要使用哪个 KDF,请查看 PBKDF2

我还建议使用密码而不是密码作为 KDF 的输入:“我喜欢火腿和菠萝披萨。

预计到达时间:PKCS7 填充优于 NoPadding。这样,当填充不匹配时,您将在代码中捕获更多错误。