AES 256加密问题 [英] AES 256 Encryption Issue

查看:135
本文介绍了AES 256加密问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码完美地实现了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆