2011-06-07 89 views
0

我制作了一个包p,包含一些整数和布尔值。数据包如下:在Java中使用AES算法进行加密

TCPPacket p=new TCPPacket(481,516,23,42,true,false,false,false,false,false,false,false,10,10); 

如何在Java中使用AES加密数据包?

回答

3

我建议您阅读Oracle的教程Using AES with Java Technology

(先打上谷歌顺便说一句。)

+0

好的问题是,加密我总是将数据包更改为字符串或可能字节[] ...加密后,我不能反向字符串(或字节[])到数据包,在我创建它的形式。 .. 可能吗? – user758084 2011-06-07 08:37:31

1

这是一些示例代码,应该让你开始。它使用AES(128)来加密和解密对象(使用SealedObject)。

public class App { 

    public static void main(String[] args) throws Exception { 
     TCPPacket packet = new TCPPacket(481, 516, 23, 42, true, false, false, false, false, false, false, false, 10, 10); 

     final char[] password = "secretpass".toCharArray(); 
     final byte[] salt = "a9v5n38s".getBytes(); 

     // Create key 
     SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
     KeySpec spec = new PBEKeySpec(password, salt, 1024, 128); 
     SecretKey tmp = factory.generateSecret(spec); 
     SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES"); 

     // Init ciphers 
     Cipher cipher = Cipher.getInstance("AES"); 
     Cipher dcipher = Cipher.getInstance("AES"); 
     cipher.init(Cipher.ENCRYPT_MODE, secret); 
     dcipher.init(Cipher.DECRYPT_MODE, secret); 

     // Encrypt packet 
     SealedObject so = new SealedObject(packet, cipher); 

     // Decrypt packet 
     TCPPacket decryptedPacket = (TCPPacket) so.getObject(dcipher); 

     System.out.println(decryptedPacket.first); 
    } 

    private static class TCPPacket implements Serializable { 
     private int first; 
     public TCPPacket(final int _first, final int i1, final int i2, final int i3, final boolean b, final boolean b1, 
         final boolean b2, final boolean b3, final boolean b4, final boolean b5, final boolean b6, 
         final boolean b7, final int i4, final int i5) { 

      first = _first; 
     } 
     public int getFirst() { 
      return first; 
     } 

    } 
} 
+0

非常感谢你,但我可以问一些问题。?为什么要打印decryptetPacket.first而不仅仅是解密的包?使用.first我只需要481(在我的数据包中的第一个整数,没有它就像[email protected]那样。所以也许我应该做些什么来摆脱javaapplication7.Main $ TCPPacket @ ...或者那里是......我没有得到你的代码? – user758084 2011-06-07 09:10:06

+0

这只是一个例子,表明数据包内的值实际上是解密的。 – 2011-06-07 09:13:31