作者sunsam777 (行善为乐)
看板java
标题[问题] 使用JAVA API写AES加密器的问题
时间Sun Dec 9 15:15:02 2012
您好~小弟又来问问题了
我用JAVA 的API来处理AES加密的问题
因为小弟是新手,所以有参考别人的写法
参考的网址为
http://cooking-java.blogspot.tw/2010/03/java-aes-encrypt.html
我修改成下列程式码
为了提高可读性,我import的部分就省略了
执行结果 有列印出明文 与 key
不过key怎麽是乱码??
另外如果用128长度的key可以执行
但用192与256长度就会抓到InvalidKeyException
如下(我用eclipse)
Exception:java.security.InvalidKeyException: Illegal key size or default parameters
Exception in thread "main" java.lang.IllegalStateException: Cipher not initialized
at javax.crypto.Cipher.c(DashoA12275)
at javax.crypto.Cipher.doFinal(DashoA12275)
所以想请教
1.怎麽让key不是乱码
2.如何可执行192与256key
3.另外我还没写到先问,可以使用PKCS7Padding 吗?
--------------------------------------------------------------------------
1. public class AES
2. {
3.
4. public static void main(String args[])
5. {
6. String msg = "This is a message."; //欲加密的字串
7.
8. KeyGenerator keyG = null;
9. try
10. {
11. keyG = KeyGenerator.getInstance("AES"); //设定要使用的加密演算法
12. }
13. catch(NoSuchAlgorithmException e )
14. {
15. System.out.println("Exception:" + e);
16. }
17. System.out.println("原始字串:" + new String(msg));
18. keyG.init(192); //设定key的长度
19. SecretKey secuK = keyG.generateKey(); //产生SecretKey
20. byte[] key = secuK.getEncoded(); //取得要用来加密的key(解密也需使用这把key)
21. System.out.println("key:"+new String(key));
22. SecretKeySpec spec = new SecretKeySpec(key, "AES");
23.
24. Cipher cipher = null;
25. try
26. {
27. cipher = Cipher.getInstance("AES");
28. }
29. catch(NoSuchAlgorithmException e)
30. {
31. System.out.println("Exception:" + e);
32. }
33. catch(NoSuchPaddingException e)
34. {
35. System.out.println("Exception:" + e);
36. }
37.
38. try
39. {
40. cipher.init(Cipher.ENCRYPT_MODE, spec); //设定为加密模式
41. }
42. catch(InvalidKeyException e)
43. {
44. System.out.println("Exception:" + e);
45. }
46.
47. byte[] encryptData = null;
48. try
49. {
50. encryptData = cipher.doFinal(msg.getBytes()); //将字串加密,并取得加密後的资料
51. }
52. catch(IllegalBlockSizeException e)
53. {
54. System.out.println("Exception:" + e);
55. }
56. catch(BadPaddingException e)
57. {
58. System.out.println("Exception:" + e);
59. }
60.
61.
62. System.out.println("加密後字串:"+new String(encryptData));
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 113.61.142.192
1F:→ ssccg:key length是java的加密强度限制 12/09 15:36
2F:推 PsMonkey:你那 reference 上头印出的 key 也是乱码阿? 12/09 15:37
3F:→ PsMonkey:为甚麽你要在意 key 是不是乱码... 12/09 15:37
4F:→ ssccg:去官网抓JCE Unlimited Strength Jurisdiction Policy Files 12/09 15:38
5F:→ ssccg:binary资料直接印当然是乱码(数值含有你不想看到的字元) 12/09 15:44
6F:→ sunsam777:太神了 软体更新完 就可以使用各种key长度了 12/09 19:41
7F:→ sunsam777:不过只能用PKCS#5padding 要怎样才能用7的?? 12/09 20:36
8F:推 parrylin:谢谢ssccg提供资讯 01/15 13:30