Java AES加密错误

我想使用AES加密技术对邮件进行加密。当我使用此代码时,我遇到了一些错误


java.security.InvalidKeyException: Illegal key size or default parameters

我的加密代码:


public class Encryption {


    public static class MessageEncrypt {


        public static class AES {

            private final static String ALGO = "AES";

            private String secretKey;

            private String data;


            public String encrypt(String secretKey, String data) throws Exception {

                SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");

                KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), secretKey.getBytes(), 128, 256);

                SecretKey tmp = factory.generateSecret(spec);

                SecretKey key = new SecretKeySpec(tmp.getEncoded(), ALGO);

                Cipher cipher = Cipher.getInstance(ALGO);

                cipher.init(Cipher.ENCRYPT_MODE, key);

                return toHex(cipher.doFinal(data.getBytes()));

            }


            public String decrypt(String secretKey, String data) throws Exception {

                SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");

                KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), secretKey.getBytes(), 128, 256);

                SecretKey tmp = factory.generateSecret(spec);

                SecretKey key = new SecretKeySpec(tmp.getEncoded(), ALGO);

                Cipher cipher = Cipher.getInstance(ALGO);

                cipher.init(Cipher.DECRYPT_MODE, key);

                return new String(cipher.doFinal(toByte(data)));

            }


            private static byte[] toByte(String hexString) {

                int len = hexString.length() / 2;

                byte[] result = new byte[len];

                for (int i = 0; i < len; i++)

                    result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue();

                return result;

            }



潇湘沐
浏览 216回答 2
2回答

哔哔one

您也可以使用没有此限制的OpenJDK。任何从事密码学工作的人都知道密码的导入/导出涉及复杂的法律问题。OpenJDK中的JCE具有开放的加密接口,这意味着它不限制可以使用的提供程序。编辑:由于我太菜鸟了,所以我无法回复Jens。

小怪兽爱吃肉

最简单的解决方案是将jdk升级到jdk1.8.0_161或更高版本。由于有一个好消息,因为Java打包与从jdk1.8.0_161开始的有限和无限策略jar捆绑在一起,并且默认情况下它使用无限策略设置。因此,我们所需要做的就是使用升级的Java版本(jdk1.8.0_161或更高版本或者默认情况下,java安装包装随附128位密钥大小,在这里您使用的似乎是更大大小的密钥。为了使其正常工作,我们需要从此处安装java密码学扩展无限强度策略jar 。您需要使用无限强度的策略jar更新Java安全策略jar。安装笔记:•Unix(Solaris / Linux / Mac OS X)和Windows使用不同的路径名分隔符,因此请为您的环境使用适当的分隔符(“ \”,“ /”)。•(下)是指JRE的安装目录。根据您是在JRE上运行JCE还是在Java Development Kit或JDK™中包含的JRE来确定。JDK包含JRE,但在文件层次结构中处于不同级别。例如,如果JDK安装在Unix上的/home/user1/jdk1.8.0或Windows上的C:\ jdk1.8.0中,则为:/home/user1/jdk1.8.0/jre [Unix] C:\ jdk1.8.0 \ jre [Windows]另一方面,如果JRE安装在Unix上的/home/user1/jre1.8.0或Windows上的C:\ jre1.8.0中,但未安装JDK,则为:/home/user1/jre1.8.0 [Unix] C:\ jre1.8.0 [Windows]•在Windows上,对于每个JDK安装,可能在“程序文件”目录下安装了其他JRE。请确保为计划使用的所有JRE安装强度不受限制的策略JAR文件。以下是安装说明:1. 从此处下载,解压缩并提取无限强度的JCE策略文件。这将创建一个名为UnlimitedJCEPolicyJDK8的子目录。该目录包含以下文件:local_policy.jar&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Unlimited strength local policy fileUS_export_policy.jar&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Unlimited strength US export policy file2. 复制无限强度策略JAR文件。这些文件已经存在,我们需要用附件替换它们。<java-home>/lib/security&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[Unix]<java-home>\lib\security&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[Windows]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java