AES 256加密问题 [英] AES 256 Encryption Issue
问题描述
以下代码完美地实现了AES-128加密/解密。
public static void main(String [] args)throws异常
{
String input = JOptionPane.showInputDialog(null,Enter your String);
System.out.println(Plaintext:+ input +\\\
);
//生成密钥
KeyGenerator keygen = KeyGenerator.getInstance(AES);
keygen.init(128);
byte [] key = keygen.generateKey()。getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(key,AES);
//随机生成IV
SecureRandom random = new SecureRandom();
byte [] iv = new byte [16];
random.nextBytes(iv);
IvParameterSpec ivspec = new IvParameterSpec(iv);
//初始化加密模式
密码加密= Cipher.getInstance(AES / CBC / PKCS5Padding);
cipher.init(Cipher.ENCRYPT_MODE,skeySpec,ivspec);
//加密消息
byte [] encryption = cipher.doFinal(input.getBytes());
System.out.println(Ciphertext:+ encryption +\\\
); //
//初始化用于解密的密码
cipher.init(Cipher.DECRYPT_MODE,skeySpec,ivspec);
//解密消息
byte [] decrypt = cipher.doFinal(encryption);
System.out.println(Plaintext:+ new String(decrypt)+\\\
);
}
当我要使用AES-256时,我认为可以通过只是修改 keygen.init(256);
和 byte [] iv = new byte [32];
变为错误(线程主中的异常java.security.InvalidKeyException:非法密钥大小)!有人可以解释为什么错误发生时,我做这两个修改,我该怎么办。 )
如果要使用AES 256加密,必须安装无限制强度管辖权政策文件: p>
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
这启用
使用< java-home> \\中的当前文件替换zip中的文件。 \\ lib \security
。
The following code perfectly implements AES-128 encryption/decryption.
public static void main(String[] args) throws Exception
{
String input = JOptionPane.showInputDialog(null, "Enter your String");
System.out.println("Plaintext: " + input + "\n");
// Generate a key
KeyGenerator keygen = KeyGenerator.getInstance("AES");
keygen.init(128);
byte[] key = keygen.generateKey().getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
// Generate IV randomly
SecureRandom random = new SecureRandom();
byte[] iv = new byte[16];
random.nextBytes(iv);
IvParameterSpec ivspec = new IvParameterSpec(iv);
// Initialize Encryption Mode
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec);
// Encrypt the message
byte[] encryption = cipher.doFinal(input.getBytes());
System.out.println("Ciphertext: " + encryption + "\n"); //
// Initialize the cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);
// Decrypt the message
byte[] decryption = cipher.doFinal(encryption);
System.out.println("Plaintext: " + new String(decryption) + "\n");
}
When I want to use AES-256, I thought that can be done by just modifying keygen.init(256);
and byte[] iv = new byte[32];
, however this becomes error (Exception in thread "main" java.security.InvalidKeyException: Illegal key size)! Can someone explain why error occurs when I made these two modification and what should I do. Thank you guys :)
If you want to use AES 256 encryption you must install the Unlimited Strength Jurisdiction Policy Files:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
This enables the higher encryption levels like AES 256 and RSA 2048.
Replace the files from the zip with the current ones in <java-home>\lib\security
.
这篇关于AES 256加密问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!