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。这样,当填充不匹配时,您将在代码中捕获更多错误。
我在 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。这样,当填充不匹配时,您将在代码中捕获更多错误。