如何生成 256 位 AES 密钥
How to generate 256 bits AES key
为了生成 256 位的 AES 密钥,我编写了以下代码:
KeyGenerator keyGen;
try {
keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256);
SecretKey secretKey = keyGen.generateKey();
return secretKey;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
我的加密方式是:
private byte[] aes256Encode(SecretKey key, IvParameterSpec iv, String message) throws InvalidKeyException,
InvalidAlgorithmParameterException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException
{
Cipher cipher = Cipher.getInstance("AES/CFB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encrypted = cipher.doFinal(message.getBytes());
return encrypted;
}
IV生成方法为:
private IvParameterSpec generateAESIV() {
// build the initialization vector (randomly).
SecureRandom random = new SecureRandom();
byte iv[] = new byte[16];//generate random 16 byte long
random.nextBytes(iv);
IvParameterSpec ivspec = new IvParameterSpec(iv);
return ivspec;
}
但是在加密时,抛出以下错误:
Exception in thread "main" java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
at javax.crypto.Cipher.implInit(Cipher.java:805)
at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
at javax.crypto.Cipher.init(Cipher.java:1396)
at javax.crypto.Cipher.init(Cipher.java:1327)
谁能指出我在这里犯的错误?
您是否更新了 JCE jar?
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Java 默认为 128 位。看一看告诉我
更改此行
keyGen.init(256);
到
keyGen.init(128);
默认情况下,Java 仅支持 128 位加密。
编辑:
如果您需要使用大于 128 位的密钥加密内容,则必须使用 Java Cryptography Extension (JCE).
为了生成 256 位的 AES 密钥,我编写了以下代码:
KeyGenerator keyGen;
try {
keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256);
SecretKey secretKey = keyGen.generateKey();
return secretKey;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
我的加密方式是:
private byte[] aes256Encode(SecretKey key, IvParameterSpec iv, String message) throws InvalidKeyException,
InvalidAlgorithmParameterException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException
{
Cipher cipher = Cipher.getInstance("AES/CFB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encrypted = cipher.doFinal(message.getBytes());
return encrypted;
}
IV生成方法为:
private IvParameterSpec generateAESIV() {
// build the initialization vector (randomly).
SecureRandom random = new SecureRandom();
byte iv[] = new byte[16];//generate random 16 byte long
random.nextBytes(iv);
IvParameterSpec ivspec = new IvParameterSpec(iv);
return ivspec;
}
但是在加密时,抛出以下错误:
Exception in thread "main" java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
at javax.crypto.Cipher.implInit(Cipher.java:805)
at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
at javax.crypto.Cipher.init(Cipher.java:1396)
at javax.crypto.Cipher.init(Cipher.java:1327)
谁能指出我在这里犯的错误?
您是否更新了 JCE jar?
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Java 默认为 128 位。看一看告诉我
更改此行
keyGen.init(256);
到
keyGen.init(128);
默认情况下,Java 仅支持 128 位加密。
编辑: 如果您需要使用大于 128 位的密钥加密内容,则必须使用 Java Cryptography Extension (JCE).