Java 尝试使用bouncycastle抛出错误进行加密

Java 尝试使用bouncycastle抛出错误进行加密,java,aes,bouncycastle,Java,Aes,Bouncycastle,我正在尝试使用bouncycastle jar加密我的代码: private static byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception { PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher( new AESEngine())); CipherParame

我正在尝试使用bouncycastle jar加密我的代码:

private static byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception
{
    PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
            new AESEngine()));
    CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
    aes.init(true, ivAndKey);
    return cipherData(aes, plain);
}
以下是我的主要观点:

    String msg="hello";
    String key="123";

    SecureRandom secureRandom = new SecureRandom();
    byte[] keyB = new byte[16];
    secureRandom.nextBytes(keyB);
    SecretKey secretKey = new SecretKeySpec(keyB, "AES");

    byte[] enc=encrypt(msg.getBytes(),key.getBytes(),keyB);

    System.out.println(new String(enc));
但是我/我越来越

Exception in thread "main" java.lang.IllegalArgumentException: Key length not 128/192/256 bits.
    at org.bouncycastle.crypto.engines.AESEngine.generateWorkingKey(Unknown Source)
    at org.bouncycastle.crypto.engines.AESEngine.init(Unknown Source)
    at org.bouncycastle.crypto.modes.CBCBlockCipher.init(Unknown Source)
    at org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher.init(Unknown Source)
    at Aes.encrypt(Aes.java:122)
    at Aes.main(Aes.java:47)

您没有将您认为是的内容传递到
encrypt()
方法:

String key="123";
…
byte[] enc=encrypt(msg.getBytes(),key.getBytes(),keyB);

您传递的是编码字符串内容,而不是在其中创建几行的密钥数组。

您没有将您认为是的内容传递到
encrypt()
方法:

String key="123";
…
byte[] enc=encrypt(msg.getBytes(),key.getBytes(),keyB);

您传递的是编码字符串内容,而不是在其中创建几行的密钥数组。

异常消息会准确地告诉您问题所在。您的密钥长度不是可接受的位数。16字节是128位@T_BaconSure,但
key.getBytes()
不会返回128位,是吗?作为快速测试,运行
System.out.println(key.getBytes().length)
您将看到它实际上是3个字节,因此只有24位。异常消息会准确地告诉您问题所在。您的密钥长度不是可接受的位数。16字节是128位@T_BaconSure,但
key.getBytes()
不会返回128位,是吗?作为快速测试,运行
System.out.println(key.getBytes().length)
您将看到它实际上是3个字节,因此只有24位。这种错误在调试器中很容易找到。这种错误在调试器中很容易找到。