ScrambledKeyGeneratorpublic class ScrambledKeyGenerator extends SimpleKeyGenerator A utility class that generates stateful session keys using two longs
The session id generated by this class is guarenteed to be unique as
long as the system clock is never reset to a previous value
The hashCode of the SessionKey generated by ScrambledKeyGenerator
also allows uniform distribution of keys when hashed in a HashMap |
Fields Summary |
---|
private SecureRandom | random | private int | cachedTime |
Constructors Summary |
---|
public ScrambledKeyGenerator()
init((int) System.currentTimeMillis(), System.identityHashCode(this));
| public ScrambledKeyGenerator(byte[] ipAddress, int port)
init(Utility.bytesToInt(ipAddress, 0), port);
| public ScrambledKeyGenerator(long val)
init((int) (val >>> 32), (int) ((val << 32) >>> 32));
|
Methods Summary |
---|
public java.lang.Object | createSessionKey()Create and return the sessionKey.
int id = 0;
synchronized (this) {
id = ++idCounter;
if (id < 0) {
//idCounter wrapped around!!
id = idCounter = 1;
}
if ((id & 0x000000FF) == 0) {
cachedTime = (int) System.currentTimeMillis();
}
}
return new SimpleSessionKey(
prefix + cachedTime,
//suffix + System.identityHashCode(new Object()), id
suffix + random.nextInt(), id
);
| private void | init(int hi, int lo)
byte[] hiBytes = new byte[4];
Utility.intToBytes(hi, hiBytes, 0);
byte[] loBytes = new byte[4];
Utility.intToBytes(lo, loBytes, 0);
swapBytes(hiBytes, loBytes, 2, 3);
swapBytes(loBytes, loBytes, 2, 3);
swapBytes(hiBytes, loBytes, 3, 0);
swapBytes(hiBytes, hiBytes, 0, 3);
swapBytes(hiBytes, loBytes, 1, 3);
swapBytes(hiBytes, hiBytes, 0, 1);
swapBytes(loBytes, loBytes, 2, 3);
this.prefix = Utility.bytesToInt(hiBytes, 0);
this.prefix <<= 32;
this.suffix = Utility.bytesToInt(loBytes, 0);
this.suffix <<= 32;
//Inital isCounter value
this.idCounter = 0;
//Set the default time value
this.cachedTime = (int) System.currentTimeMillis();
| private static final void | swapBytes(byte[] a, byte[] b, int index1, int index2)
byte temp = a[index1];
a[index1] = b[index2];
b[index2] = temp;
|
|