我研究了许多源代码,并发现如何在AES java中指定块大小的困难? java支持到256位吗?我搜索了php源代码,它支持直到256位AES加密
这是AES加密的示例源代码。谢谢大家帮助我弄明白。 http://aesencryption.net/
答案 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;
}