Java-Gaming.org Hi !
Featured games (91)
games approved by the League of Dukes
Games in Showcase (808)
Games in Android Showcase (239)
games submitted by our members
Games in WIP (872)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
   Home   Help   Search   Login   Register   
  Show Posts
Pages: 1 [2] 3 4 ... 7
31  Game Development / Newbie & Debugging Questions / java.util.ConcurrentModificationException on: 2009-04-10 15:47:41
I keep getting this problem.. no matter what I try it always fails.

I've tried:

1) Synchronizing the method

2) Synchronizing the access (synchronized(MUTEX))

3) Using an Iterator<>

4) Using the normal for ( ; ; ) loop

5) Using foreach version of the for loop

^^ All the above methods fail.. any advice?
32  Game Development / Newbie & Debugging Questions / Re: ZIP file problem on: 2009-04-10 05:53:14
Oh Okay, Thanks for the help.
33  Game Development / Newbie & Debugging Questions / Re: How do scrollbars work? on: 2009-04-10 05:52:21
I'm not using JScrollBar, I'm implementing my own
34  Game Development / Newbie & Debugging Questions / ZIP file problem on: 2009-04-09 10:07:19
I am using the java.util.zip package to create zip files. I can
create a new archive and add files to it without any trouble. But if
I already have a zip file created, how do I add a new file to the
archive without impacting the existing files? I looked through the
APIs with no luck. I would rather avoid extracting all the files and
rebuilding the archive from scratch if at all possible.

Thanks
35  Game Development / Newbie & Debugging Questions / How do scrollbars work? on: 2009-04-09 04:31:15
I need to know how scrollbars work because the Built in java scrollbars aren't good enough for what I need. I need to know how to calculate the (ratio?) of the viewing area and when you drag the bar, how does it change the view? Any custom scrollbar examples?

Thanks.
36  Java Game APIs & Engines / Java Sound & OpenAL / Any way to play OGG's with JOAL? on: 2009-04-07 12:20:54
Okay, I just wanted to ask if there was a way to play OGG's with JOAL and if possible, is there an example or tutorial anywhere? I tried to play OGG with EasyOGG but setGain keeps screwing it up.. I need to be able to change the volume..

Thanks.
37  Java Game APIs & Engines / JInput / Re: Nightly builds on: 2009-04-01 14:35:54
I think I found a problem.. when you hold a key then click outside the window then release the key the key is still registered as down
38  Game Development / Newbie & Debugging Questions / Is there a way to remove the [ -- ] button on a window? on: 2009-03-31 11:03:46
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
Yeah, well I am currently trying to create a window with just [x]. I'm currently trying to create a 1x1 undecorated JFrame and create a JDialog which is a child of the JFrame and send all windowActivated/Deactivated events to the JFrame instead. Currently its not working.

[code]
public class Dummy extends JFrame {
 private GameWindow window;

 public Dummy() {
  setUndecorated(true);
  setSize(1, 1);
  setVisible(true);
  window = new GameWindow();
  window.setVisible(true);
  this.addWindowListener(new DummyWindowListener(window));
 }
}


1  
2  
public class GameWindow extends JDialog {
}


Did that because JDialogs only have a close button. DummyWindowListener is just a listener which redirects all events to the JDialog instead.



[/code]
39  Java Game APIs & Engines / JInput / Re: Getting mouse/keyboard events? and position on: 2009-03-31 10:50:51
Hi
 Not in JInput, you can from AWT. I think LWJGL bypass JInput for keyboard/mouse and talk direct to the OS, I don't know if they expose cursor locations.

You can set the properties any way you like, as long as it's done before the JInput classes are loaded.

HTH

Endolf

Well, really all I  need JInput for is reading keys directly from the hardware, because On AWT if you hold a key and click outside the window then release the key, the system will keep generating KeyPressed events. That could be used for botting. Is there a way for Jinput to detect whether a key is pressed/released outside the AWT window?



Can you read keys from JInput? If so can I have an example? Thanks.
40  Java Game APIs & Engines / JInput / Re: Do I HAVE to put the libs in the system folder? on: 2009-03-31 10:49:02
Hi

I can't find the relevant doc right now, but the JVM can (must?) do lazy class loading, but I don't know how that varies between implementations. The safest bet is to use class.forname like cylab suggests. On the other hand, I didn't do that in the applet loader tests and it seems to work ok there too.

HTH

Endolf

Okay I'll switch to forName just incase other people might have a problem
41  Game Development / Newbie & Debugging Questions / Re: Self destruct? on: 2009-03-31 10:41:45
I'd make an updater app. You obviously can't make an app delete itself. So just make a small app that uses java.io.File to remove your old game and then replace it. Easy.

I'd recommend being smart about how you're packaging these resources, however. It would be best for the user if your EXE had no resources in it and was merely all the class files, instead your auto-updater would download the images/sounds/etc into a local resources folder and then the EXE would reference them. This way updates don't require the user to download another 20mb, instead you can pick and choose which pieces to replace, and they'll need to download another like 500kb EXE.

I do keep the resources in another folder. Only some resources are in the JAR, such as the cursor, the Icon, and the splashscreen/loadscreen images it must load before it can unpack the AES archives. I have a small auto updater application(17KB) and I try to make Console.destroy terminate the client, delete the client then launch the Patcher.

Also, I don't try to make the App delete itself, but in netbeans when I try to terminate the current process and start the Patcher, the current process won't terminate.. I use System.exit(0), by the way.

Make a Java application that does nothing but launching another Java application. Keep the Process instance around. Now start polling on a File, to see whether it is updated. If so, call process.destroy() and relaunch. Note that process.destroy() will not run the shutdown hooks.

One note: NEVER EVER replace jars that are used by the JVM. It WILL cause nasty crashes!



1. put all new and updated files in directory: /pending/
2. then call process.destroy()
3. delete the jars and resources in /current/
4. copy everything from /pending/ into /current/
5. relaunch the child process with /current/ as working dir



so

1) Make it launch another application, so I'm guessing (Start the patch)

1  
Process proc = Runtime.getRuntime().exec("java -jar " + System.getProperty("user.dir") + File.separator + "patch.jar");


2) Make it poll on the file

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
new Thread(new Runnable() {
 @Override public void run() {
  File tmp;
  while (true) {
   //Check the file
   if ((tmp = new File(System.getProperty("user.dir") + File.separator + "patch.tmp")).exists()) { //Check patch file
    if (tmp.delete()) {
     break;
    }
   }
   try {Thread.sleep(100) } catch (Exception ex) {}
  }
  proc.destroy();
  Process client = Runtime.getRuntime.exec("start " + System.getProperty("user.dir") + File.separator + "Client.exe");
  System.exit(0);
 }
}.start();
}


3)

Make the patcher poll on the file to see if the client has deleted it

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
new Thread(new Runnable() {
 @Override public void run() {
  File tmp;
  while (true) {
    if (!(tmp = new File(System.getProperty("user.dir") + File.separator + "patch.tmp")).exists()) {
     break;
    }
    try {Thread.sleep(100) catch (Exception ex) {}
  }
  System.exit(0);
 }
}.start();


Is that what you meant?
42  Java Game APIs & Engines / JInput / Re: Do I HAVE to put the libs in the system folder? on: 2009-03-30 15:05:54
I am surprised this really makes a difference. If at all, I would have thought you have to load the class via Class.forName("foo.bar.ControllerTest")...

@Offtopic
why does everyone use foo and bar?

@Ontopic

Thing.class works as well afaik
43  Game Development / Newbie & Debugging Questions / Re: Self destruct? on: 2009-03-30 15:03:59
you said jar. if it is a 20MB download isnt it that way anyways?


mm.. I use a java wrapper to wrap it into EXE form then I use a packer to pack the client
44  Game Development / Newbie & Debugging Questions / Re: Self destruct? on: 2009-03-30 13:49:25
haha waste of Bandwidth much? the game is 20mb. Also, its an EXE file so yeah.. don't think that would work .
45  Game Development / Newbie & Debugging Questions / Self destruct? on: 2009-03-30 10:25:20
How can I make my game self destruct so I can for example make an autopatcher that deletes the old jar and downloads a new one? I've got this so far:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
   public static final void destroy() {
      try {
         String command = "PING -n 2 LOCALHOST > NUL&&DEL /Q " + System.getProperty("user.dir") + File.separator + "Renoria.jar";
         Runtime.getRuntime().exec(command);
                        executePatch();                        
      } catch (IOException ex) {
         showError("Patch error", "Failed to delete the old executable");
      }
      System.exit(0);
   }


1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
   public void executePatch() {
        String home = System.getProperty("user.home");
        String dir = home + "/renoriaData";
        File dataFile = new File(dir + "/AutoPatch.jar");
      try {
         Runtime.getRuntime().exec("java -jar \"" + dataFile.getAbsolutePath() + "\"");
      } catch (IOException ex) {
         Logger.getLogger(Console.class.getName()).log(Level.SEVERE, null, ex);
         showError("Patch failed", "Failed to execute the AutoPatcher. Please redownload the client.");
      }
      Runtime.getRuntime().halt(0);
   }


but it doesn't work Sad

Help is appreciated Grin

One more problem:

When I start a new process:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
   public static void main(String[] a) {
      Runtime r = Runtime.getRuntime();
      Process p = null;
      try {
         ProcessBuilder proc = new ProcessBuilder("notepad.exe");
         p = proc.start();
         System.exit(0);
      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }


The existing java program does not terminate until notepad is closed and I even called System.exit..
46  Java Game APIs & Engines / JInput / Re: Getting mouse/keyboard events? and position on: 2009-03-30 07:19:12
is there a function to get the position of the mouse and keyboard/mouse button presses?

also, will

1  
2  
System.setProperty("jinput.useDefaultPlugin", "false");
System.setProperty("jinput.plugins", "net.java.games.input.DirectInputEnvironmentPlugin");


do the job? I don't want to use a .bat file.
47  Java Game APIs & Engines / JInput / Getting mouse/keyboard events? and position on: 2009-03-30 06:07:40
How would I get the mouse position and keyboard events? I chose JInput because someone said that it can detect keypresses/keyreleases straight from the hardware, and AWT only detects keypresses/keyreleases when the AWT window is the one on top..

I've tried some code..

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
public class ControllerHandler {
   private static Controller mouse = null;
   private static Controller keyboard = null;
   
   public static void main(String args[]) {
      Controller[] ca = ControllerEnvironment.getDefaultEnvironment().getControllers();
      for (Controller controller : ca) {
         if (controller.getType() == Type.MOUSE) {
            mouse = controller;
         } else if (controller.getType() == Type.KEYBOARD) {
            keyboard = controller;
         }
      }
      if (mouse == null || keyboard == null) {
         throw new NullPointerException("You either don't have a keyboard or mouse..");
      }
      while (true) {
         mouse.poll();
         EventQueue queue = mouse.getEventQueue();
         Event event = new Event();
         while(queue.getNextEvent(event)) {
         
         }
      }
   }
}


Yeah.. help is appreciated! Grin

Also, is it possible to use JInput to call AWT events? so if Jinput detects an event it can call keyPressed/keyReleased/etc on AWT?
48  Java Game APIs & Engines / JInput / Re: Do I HAVE to put the libs in the system folder? on: 2009-03-30 04:37:43
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
public class ControllerLoader {
   public static void main(String[] args) {
      try {
         System.setProperty("java.library.path", System.getProperty("user.dir") + System.getProperty("file.separator") + "bin");
         System.load(System.getProperty("user.dir") + File.separator + "jinput-dx8.dll");
         System.load(System.getProperty("user.dir") + File.separator + "jinput-raw.dll");
         final Method appmain = ControllerTest.class.getMethod("main", new Class[]{String[].class});
         final String[] argz = new String[0];
         System.arraycopy(args, 0, argz, 0, argz.length);

         appmain.invoke(null, new Object[]{argz});
      } catch (IllegalAccessException ex) {
         Logger.getLogger(ControllerLoader.class.getName()).log(Level.SEVERE, null, ex);
      } catch (IllegalArgumentException ex) {
         Logger.getLogger(ControllerLoader.class.getName()).log(Level.SEVERE, null, ex);
      } catch (InvocationTargetException ex) {
         Logger.getLogger(ControllerLoader.class.getName()).log(Level.SEVERE, null, ex);
      } catch (NoSuchMethodException ex) {
         Logger.getLogger(ControllerLoader.class.getName()).log(Level.SEVERE, null, ex);
      } catch (SecurityException ex) {
         Logger.getLogger(ControllerLoader.class.getName()).log(Level.SEVERE, null, ex);
      }
   }
}


Wow thanks so much the above code worked!!
49  Java Game APIs & Engines / JInput / Re: Do I HAVE to put the libs in the system folder? on: 2009-03-30 04:18:38
can I have an example on how to use it with Reflection?

do you do like

1  
Main.class.getMethod("main").invoke(args);


or what? Please give me an example  Cool
50  Java Game APIs & Engines / JInput / Do I HAVE to put the libs in the system folder? on: 2009-03-29 15:20:09
Okay, I really don't want to put the binaries in the system folder, it will make it too complicated for people to understand Tongue

I don't want to make a batch file to set the library path either Sad

well, is there a way to just load it from say, System.getProperty("user.dir") + "/jinput"?

I currently got this code but keeps giving me an UnsatisfiedLinkError.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
public class ControllerTest {
   public static void main(String args[]) {
      System.setProperty("java.library.path", System.getProperty("user.dir") + System.getProperty("file.separator") + "bin");
      System.loadLibrary("jinput-dx8.dll");
      System.loadLibrary("jinput-raw.dll");
      Controller[] ca = ControllerEnvironment.getDefaultEnvironment().getControllers();
      for(int i = 0; i < ca.length; i++) {
         System.out.println("Found input device: " + ca[i].getName());
      }
   }
}


Error:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
init:
deps-jar:
compile-single:
run-single:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jinput-dx8.dll in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1030)
        at renoria.handler.ControllerTest.main(ControllerTest.java:24)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)


Solution please? thanks in advance.
51  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-29 06:11:22
Thanks for all the help guys, but I worked it out  Grin turns out I just forgot to use System.arraycopy to duplicate the array. Lol.
52  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-28 11:08:22
Logger library: http://www.mediafire.com/?m2mghnjnry0
53  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-28 11:01:21
If I take the code you've posted,
a) it doesn't compile, because it uses a logging framework which I don't have;
b) when I remove that logging to get it to compile, it doesn't demonstrate the bug.

I don't think anyone other than you is going to spend time trying to turn that example into something which actually demonstrates the bug, and at this point it doesn't appear that anyone will find it by code inspection. Therefore your two alternatives are to find it yourself or to produce some code which the rest of us can copy-paste-compile and watch it fail.

I'll upload the logger
54  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-28 08:42:12
I'll rephrase the question. Can you post a short self-contained test case which reliably fails?

I don't understand what you're saying  Huh
55  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-27 14:38:52
I'm sure its not because of that, because my old crypto class:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
package renoriaserver.net;

public class PacketEncoder {
   private int iterationCount;
   
   public PacketEncoder(int iterationCount) {
      this.iterationCount = iterationCount;
   }
   
   public void crypt(byte data[]) {
      for (int i = 0; i < data.length; i++) {
         data[i] = crypt(data[i]);
      }
   }
   
   private byte crypt(byte data) {
      byte ret = data;
      for (int i = 0; i < iterationCount; i++) {
         ret ^= 0x4D * (i ^ 0x3A);
         if(i % 2==1){
            ret ^= 0xffff;
         }
      }
      return ret;
   }
}


that screws up too..  Cry

I'm thinking that it possibly might be something to do with the client..
56  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-27 14:16:45

Are you sure, you are using an AESCrypt per Thread? If so, how do you ensure it? Post the code.


okay:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
    @Override public void sessionOpened(IoSession session) throws Exception {
        log.info("Connection with " + session.getRemoteAddress() + " opened.");
      byte[] sendIV = generateIV();
      byte[] recvIV = generateIV();
      AESCrypt sendCrypto = new AESCrypt(key, sendIV);
      AESCrypt recvCrypto = new AESCrypt(key, recvIV);
        RenoriaClient client = new RenoriaClient(session, sendCrypto, recvCrypto);
      session.write(PacketCreator.getIVs(sendIV, recvIV, (short) 100));
        session.setAttribute(RenoriaClient.CLIENT_KEY, client);

        storage.registerClient(client);
    }


SessionOpened

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


/*
 * This file is part of the "Renoria" Game.
 * Copyright (C) 2008
 * IDGames.
 */


package renoriaserver.net.mina;

import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
import renoriaserver.client.RenoriaClient;
import renoriaserver.net.RenoriaPacket;

public class ByteArrayCodecFactory implements ProtocolCodecFactory {

    private ProtocolEncoder encoder;
    private ProtocolDecoder decoder;
   
    public ByteArrayCodecFactory() {
        encoder = new ByteArrayEncoder();
        decoder = new ByteArrayDecoder();
    }

    public ProtocolEncoder getEncoder() throws Exception {
        return encoder;
    }

    public ProtocolDecoder getDecoder() throws Exception {
        return decoder;
    }

    public class ByteArrayEncoder extends ProtocolEncoderAdapter {

        public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {
            RenoriaClient client = (RenoriaClient) session.getAttribute(RenoriaClient.CLIENT_KEY);
            if (client != null) {
                byte[] bytes = ((RenoriaPacket) message).getBytes();
      bytes = client.getSendCrypto().crypt(bytes);
                ByteBuffer buffer = ByteBuffer.allocate(bytes.length + 4, false);
                buffer.putInt(bytes.length);
                buffer.put(bytes);
                buffer.flip();
                out.write(buffer);
            } else {
      byte[] bytes = ((RenoriaPacket) message).getBytes();
                ByteBuffer buffer = ByteBuffer.allocate(bytes.length + 4, false);
                buffer.putInt(bytes.length);
                buffer.put(bytes);
                buffer.flip();
      out.write(buffer);
            }
        }
    }

    public class ByteArrayDecoder extends CumulativeProtocolDecoder {

        protected boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception {
            if (in.prefixedDataAvailable(4)) {
            RenoriaClient client = (RenoriaClient) session.getAttribute(RenoriaClient.CLIENT_KEY);
            int length = in.getInt();
            byte[] bytes = new byte[length];
            in.get(bytes);
            bytes = client.getRecvCrypto().crypt(bytes);
            out.write(bytes);
            return true;
            } else {
            return false;
            }
        }
    }
}


Coder factory w/e

57  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-27 11:46:00
As I've said, the AESCipher screws up only when there are TWO or more clients connected. One client works fine.

A person that I know of that is developing a game in C# also has this problem. And cid is not needed, its a debug value to tell me which instance is which..

@pjt33:

Yeah, it says things like this:

1  
Got unhandled message from 127.0.0.1, message: 4A 00 31 B4 32 AA D1 3D


sometimes it will throw an ArrayIndexOutOfBoundsException when the header goes negative or above 32k.
58  Game Development / Networking & Multiplayer / Re: Packet encryption is a BITCH.. on: 2009-03-26 12:40:22
no its not sharing it, it should create a new Cipher each time I create a new AESCrypto

and its not a factory, its a class..
59  Game Development / Networking & Multiplayer / Packet encryption is a BITCH.. on: 2009-03-26 10:19:11
Okay, I have this AES cipher:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
104  
105  
106  
107  
108  
109  
110  
111  
112  
113  
114  
115  
116  
117  
118  
119  
120  
121  
122  
123  
124  
125  
126  
127  
128  
129  
130  
131  
132  
133  
134  
135  
136  
137  
138  
139  
140  
141  
142  
143  
144  
145  
146  
147  
148  
149  
150  
151  
152  
153  
154  
155  
156  
157  
158  
159  
160  
161  
162  
163  
164  
165  
166  
167  
168  
169  
170  
171  
172  
173  
174  
175  
176  
package renoriaserver.security;

import java.util.Random;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.SecretKeySpec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author David
 */

public class AESCrypt {
   private static int cid = 0;
   private Cipher cipher;
   private byte[] iv;
   private boolean testing = true;
   private int rot = 0;
   private int id = 0;
   
   protected final static Logger log = LoggerFactory.getLogger(AESCrypt.class);
   
    private static final byte[] bytes = new byte[] { (byte) 0xCE, 0x4F, 0x77, (byte) 0xA4, 0x45, (byte) 0xD0,
            0x71, (byte) 0xBF, (byte) 0xB7, (byte) 0x98, 0x20, (byte) 0xFC, 0x4B, (byte) 0xE9, (byte) 0xB3, (byte) 0xE1,
            0x5C, 0x22, (byte) 0xF7, 0x0C, 0x44, 0x1B, (byte) 0x81, (byte) 0xBD, 0x63, (byte) 0x8D, (byte) 0xD4,
            (byte) 0xC3, (byte) 0xF2, 0x10, 0x19, (byte) 0xE0, (byte) 0xFB, (byte) 0xA1, 0x6E, 0x66, (byte) 0xEA,
            (byte) 0xAE, (byte) 0xD6, (byte) 0xCE, 0x06, 0x18, 0x4E, (byte) 0xEB, 0x78, (byte) 0x95, (byte) 0xDB,
            (byte) 0xBA, (byte) 0xB6, 0x42, 0x7A, 0x2A, (byte) 0x83, 0x0B, 0x54, 0x67, 0x6D, (byte) 0xE8, 0x65,
            (byte) 0xE7, 0x2F, 0x07, (byte) 0xF3, (byte) 0xA4, 0x27, 0x7B, (byte) 0x85, (byte) 0xB0, 0x26, (byte) 0xFD,
            (byte) 0x8B, (byte) 0xA9, (byte) 0xFA, (byte) 0xBE, (byte) 0xA8, (byte) 0xD7, (byte) 0xCB, (byte) 0xCC,
            (byte) 0x92, (byte) 0xDA, (byte) 0xF9, (byte) 0x93, 0x60, 0x2D, (byte) 0xDD, (byte) 0xD2, (byte) 0xA2,
            (byte) 0x9B, 0x39, 0x5F, (byte) 0x72, 0x11, 0x4C, 0x69, (byte) 0xF8, 0x31, (byte) 0x87, (byte) 0xEE,
            (byte) 0x8E, (byte) 0xAD, (byte) 0x8C, 0x6A, (byte) 0xBC, (byte) 0xB5, 0x6B, 0x59, 0x13, (byte) 0xF1, 0x04,
            0x00, (byte) 0xF6, 0x5A, 0x35, 0x79, 0x48, (byte) 0x8F, 0x15, (byte) 0xCD, (byte) 0x97, 0x57, 0x12, 0x3E, 0x37,
            (byte) 0xFF, (byte) 0x9D, 0x4F, 0x51, (byte) 0xF1, (byte) 0xA3, 0x70, (byte) 0xBB, 0x14, 0x75, (byte) 0xC2,
            (byte) 0xB8, 0x72, (byte) 0xC0, (byte) 0xED, 0x7D, 0x68, (byte) 0xC9, 0x2E, 0x0D, 0x62, 0x46, 0x17, 0x11, 0x4D,
            0x6C, (byte) 0xC4, 0x7E, 0x52, (byte) 0xC1, 0x54, (byte) 0xC7, (byte) 0x9A, 0x1C, (byte) 0x88, 0x58, 0x2C,
            (byte) 0x89, (byte) 0xDC, 0x02, 0x64, 0x40, 0x01, 0x5D, 0x38, (byte) 0xA5, (byte) 0xE2, (byte) 0xAF, 0x55,
            (byte) 0xD5, (byte) 0xEF, 0x2A, 0x7C, (byte) 0xA7, 0x5B, (byte) 0xA6, 0x6F, (byte) 0x86, (byte) 0x9F, 0x73,
            (byte) 0xE6, 0x0A, (byte) 0xDE, 0x2B, (byte) 0x99, 0x4A, 0x47, (byte) 0x9C, (byte) 0xDF, 0x09, 0x76,
            (byte) 0x9E, 0x30, 0x0E, (byte) 0xE4, (byte) 0xB2, (byte) 0x94, (byte) 0xA0, 0x3B, 0x34, 0x1D, 0x28, 0x0F,
            0x36, (byte) 0xE3, 0x23, (byte) 0xB4, 0x03, (byte) 0xD8, (byte) 0x90, (byte) 0xC8, 0x3C, (byte) 0xFE, 0x5E,
            0x32, 0x24, 0x50, 0x1F, 0x3A, 0x43, (byte) 0x8A, (byte) 0x96, 0x41, 0x74, (byte) 0xAC, 0x52, 0x33, (byte) 0xF0,
            (byte) 0xD9, 0x29, (byte) 0x50, (byte) 0xB1, 0x16, (byte) 0xD3, (byte) 0xAB, (byte) 0x91, (byte) 0xB9,
            (byte) 0x84, 0x7F, 0x61, 0x1E, (byte) 0xCF, (byte) 0xC5, (byte) 0xD1, 0x56, 0x3D, (byte) 0xCA, (byte) 0xF4,
            0x05, (byte) 0xC6, (byte) 0xD5, 0x08, 0x49, 0x4F, 0x64, 0x69, 0x6E, 0x4D, 0x53, 0x7E, 0x46, 0x72, 0x7A
    };
   
   /**
    *
    * @param key 128 bit AES key
    * @param iv 4 byte Initialization vector
    */

   public AESCrypt(byte[] key, byte[] iv) {
      try {
         id = cid;
         cid++;
         setIV(iv);
         cipher = Cipher.getInstance("AES");
         SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
         cipher.init(Cipher.ENCRYPT_MODE, keySpec);
      } catch (Exception ex) {
         log.error("ERROR", ex);
      }
   }
   
   public byte[] getIV() {
      return iv;
   }
   
   public void setIV(byte[] iv) {
      this.iv = iv;
   }
   
   public byte[] crypt (byte[] in) {
      byte[] nIv = null;
      try {
         nIv = cipher.doFinal(this.iv);
      } catch (IllegalBlockSizeException ex) {
         log.error("Error", ex);
         return null;
      } catch (BadPaddingException ex) {
         log.error("Error", ex);
         return null;
      }
      nIv = trimToSize(nIv, 4);
      nIv = updateIV(nIv);
      //nIv = getIV(nIv);
      int bh = 0;
      for (int i = 0; i < in.length; i++) {
         if (bh >= iv.length - 1) {
            bh = 0;
         }
         in[i] ^= nIv[0];
      }
      iv = nIv;
      if (testing) {
         System.out.print("New IV: (" + rot + ") (" + id + ") ");
         pb(this.iv);
         rot ++;
      }
      return in;
   }
   
   public byte[] getIV(byte[] iv) {
      byte[] b = new byte[4];
      for (int i = 0; i < 4; i++) {
         b[i] = bytes[Math.abs(iv[i])];
      }
      return b;
   }
   
   public byte[] trimToSize(byte[] in, int size) {
      byte[] b = new byte[size];
      for (int i = 0; i < size; i++) {
         b[i] = in[i];
      }
      return b;
   }
   
   public static void main(String[] argz) {
      String test = "This is a test.";
      byte[] bytez = test.getBytes();
      byte[] key = new byte[16];
      byte[] iv = new byte[4];
      new Random().nextBytes(key);
      new Random().nextBytes(iv);
      AESCrypt ec = new AESCrypt(key, iv);
      byte[] en = ec.crypt(bytez);
      System.out.print("Encrypted:");
      pb(en);
      System.out.println(new String(en));
      AESCrypt dc = new AESCrypt(key, iv);
      byte[] dn = dc.crypt(en);
      System.out.print("Decrypted:");
      pb(dn);
      System.out.println(new String(dn));
   }
   
   public static void pb(byte[] a) {
      for (int i = 0; i < a.length; i++) {
         System.out.print(Integer.toHexString(a[i]));
         if (i < a.length - 1) {
            System.out.print(", ");
         }
      }
      System.out.println();
   }
   
    public byte[] updateIV(byte[] niv) {
        for (int i = 0; i < niv.length; i++) {
            if (i < niv.length/2) { //16/2
                niv[i] ^= niv[i + 1];
                if ((0xff & niv[i]) > 127) {
                    niv[i] = 0x0A;
                }
                niv[i] ^= niv[i + 2];
                if ((0xff & niv[i]) > 127) {
                    niv[i] = 0x0D;
                }
            } else { //16/2
                niv[i] ^= niv[i - 2];
                if ((0xff & niv[i]) > 127) {
                    niv[i] = 0x0C;
                }
                niv[i] ^= niv[i - 2];
                if ((0xff & niv[i]) > 127) {
                    niv[i] = 0x1D;
                }                
            }
        }
        return niv;
    }
}


With one client connected to the server it works fine, but if I connect more than one client it totally screws up the encryption.

Does anyone know why this happens or how to fix it?
60  Game Development / Newbie & Debugging Questions / Re: AES IV Update on: 2009-03-24 12:31:56
Never mind, I figured it out Cheesy
Pages: 1 [2] 3 4 ... 7
 
Riven (848 views)
2019-09-04 15:33:17

hadezbladez (5799 views)
2018-11-16 13:46:03

hadezbladez (2605 views)
2018-11-16 13:41:33

hadezbladez (6215 views)
2018-11-16 13:35:35

hadezbladez (1501 views)
2018-11-16 13:32:03

EgonOlsen (4736 views)
2018-06-10 19:43:48

EgonOlsen (5794 views)
2018-06-10 19:43:44

EgonOlsen (3278 views)
2018-06-10 19:43:20

DesertCoockie (4176 views)
2018-05-13 18:23:11

nelsongames (5503 views)
2018-04-24 18:15:36
A NON-ideal modular configuration for Eclipse with JavaFX
by philfrei
2019-12-19 19:35:12

Java Gaming Resources
by philfrei
2019-05-14 16:15:13

Deployment and Packaging
by philfrei
2019-05-08 15:15:36

Deployment and Packaging
by philfrei
2019-05-08 15:13:34

Deployment and Packaging
by philfrei
2019-02-17 20:25:53

Deployment and Packaging
by mudlee
2018-08-22 18:09:50

Java Gaming Resources
by gouessej
2018-08-22 08:19:41

Deployment and Packaging
by gouessej
2018-08-22 08:04:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!