如何在java中使用AES 256位加密数据?

时间:2016-12-15 03:19:00

标签: java android encryption aes

我研究了许多源代码,并发现如何在AES java中指定块大小的困难? java支持到256位吗?我搜索了php源代码,它支持直到256位AES加密

这是AES加密的示例源代码。谢谢大家帮助我弄明白。 http://aesencryption.net/

2 个答案:

答案 0 :(得分:1)

PHP支持256块大小的 Rijndael 。 AES是Rijndael的子集,密钥大小为128,192和256位,块大小为128位。所以说PHP支持256位块大小的AES是一个矛盾(即不正确)。

Oracle的Java SE(包括Java 9)仅支持具有128位块大小和所有(3)AES密钥大小的AES,但您需要使用无限加密文件来使用192和256位加密。

要使用具有256位块大小的Rijndael,您可以使用Bouncy Castle轻量级API,不同的块大小也不会添加到Bouncy Castle提供程序中:

new RijndaelEngine(256)

对于Android,您可能需要使用Spongy Castle。

答案 1 :(得分:-3)

尝试:

public static void main(String[] args) {
       String key = "1234567890ABCDEF";
        try {
            byte[] encrypt = encrypt("hello word",key);
            System.out.println(new String(encrypt));
            String decrypt = decrypt(encrypt, key);
            System.out.println(decrypt);
        } catch (Exception ex) {

        }

    }

   public static byte[] encrypt(String message, String key1) throws Exception {

        SecretKeySpec key = new SecretKeySpec(key1.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(message.getBytes());
    }

    public static String decrypt(byte[] message, String key1) throws Exception {

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");
        SecretKeySpec key = new SecretKeySpec(key1.getBytes(), "AES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedByte = cipher.doFinal(message);
        String decryptedText = new String(decryptedByte);
        return decryptedText;
    }