无效的 AES 密钥 length:39bytes
Invalid AES Key length:39bytes
我是 java 的新手。我正在对视频文件进行加密和解密。当我提供一个小长度的密钥时,它可以正常工作,没有任何错误。如果我提供更长的密钥,它会抛出错误。
private static void doCrypto(int cipherMode, String key, File inputFile,
File outputFile) throws CryptoException {
try {
Key secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(cipherMode, secretKey);
FileInputStream inputStream = new FileInputStream(inputFile);
byte[] inputBytes = new byte[(int) inputFile.length()];
inputStream.read(inputBytes);
byte[] outputBytes = cipher.doFinal(inputBytes);
FileOutputStream outputStream = new FileOutputStream(outputFile);
outputStream.write(outputBytes);
inputStream.close();
outputStream.close();
} catch(NoSuchPaddingException|NoSuchAlgorithmException|InvalidKeyException | BadPaddingException| IllegalBlockSizeException | IOException ex) {
throw new CryptoException("Error encrypting/decrypting file",ex);
}
我收到由以下原因引起的错误:java.security.InvalidKeyException: Invalid AES key length: 39 bytes
请帮我修正下面代码中的错误
您需要使用长度受支持的特定密钥,这意味着您的密钥必须是
- 128 位
- 192 位
- 256 位
- ...
长。你的(见错误信息)只有 39 字节长。
所以你需要将String
(键)(或者更好的hash
之前的键)转换成byte
的数组,并取第一个n(其中n是一个上面的值)byte
。
import java.security.*;
byte[] bytesOfMessage = key.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] b = md.digest(bytesOfMessage); //Returns the SHA 256 hash and converts it into byte
// Continue with your code
Key secretKey = new SecretKeySpec(b , "AES");
...
我是 java 的新手。我正在对视频文件进行加密和解密。当我提供一个小长度的密钥时,它可以正常工作,没有任何错误。如果我提供更长的密钥,它会抛出错误。
private static void doCrypto(int cipherMode, String key, File inputFile,
File outputFile) throws CryptoException {
try {
Key secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(cipherMode, secretKey);
FileInputStream inputStream = new FileInputStream(inputFile);
byte[] inputBytes = new byte[(int) inputFile.length()];
inputStream.read(inputBytes);
byte[] outputBytes = cipher.doFinal(inputBytes);
FileOutputStream outputStream = new FileOutputStream(outputFile);
outputStream.write(outputBytes);
inputStream.close();
outputStream.close();
} catch(NoSuchPaddingException|NoSuchAlgorithmException|InvalidKeyException | BadPaddingException| IllegalBlockSizeException | IOException ex) {
throw new CryptoException("Error encrypting/decrypting file",ex);
}
我收到由以下原因引起的错误:java.security.InvalidKeyException: Invalid AES key length: 39 bytes
请帮我修正下面代码中的错误
您需要使用长度受支持的特定密钥,这意味着您的密钥必须是
- 128 位
- 192 位
- 256 位
- ...
长。你的(见错误信息)只有 39 字节长。
所以你需要将String
(键)(或者更好的hash
之前的键)转换成byte
的数组,并取第一个n(其中n是一个上面的值)byte
。
import java.security.*;
byte[] bytesOfMessage = key.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] b = md.digest(bytesOfMessage); //Returns the SHA 256 hash and converts it into byte
// Continue with your code
Key secretKey = new SecretKeySpec(b , "AES");
...