UUID.java
2.92 KB
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
/*
* Decompiled with CFR 0_118.
*/
package com.adobe.internal.util;
import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.util.Random;
public final class UUID {
private static String mFakeMACAddress = null;
private static Random mSeeder = null;
private UUID() {
}
public static String createUUID() {
if (mFakeMACAddress == null) {
byte[] macBytes = new byte[6];
mSeeder.nextBytes(macBytes);
BigInteger bi = new BigInteger(1, macBytes);
String macStr = bi.toString(16);
mFakeMACAddress = UUID.padHex(macStr, 12) + macStr;
}
byte[] timeLow = new byte[4];
byte[] timeMid = new byte[2];
byte[] timeHighAndVersion = new byte[2];
byte[] clockSeqHiAndReserved = new byte[1];
byte[] clockSeqLow = new byte[1];
mSeeder.nextBytes(timeLow);
mSeeder.nextBytes(timeMid);
mSeeder.nextBytes(timeHighAndVersion);
mSeeder.nextBytes(clockSeqHiAndReserved);
mSeeder.nextBytes(clockSeqLow);
byte[] arrby = clockSeqHiAndReserved;
arrby[0] = (byte)(arrby[0] & 63);
byte[] arrby2 = clockSeqHiAndReserved;
arrby2[0] = (byte)(arrby2[0] | 80);
byte[] arrby3 = timeHighAndVersion;
arrby3[0] = (byte)(arrby3[0] & 15);
byte[] arrby4 = timeHighAndVersion;
arrby4[0] = (byte)(arrby4[0] | 40);
StringBuilder uuid = new StringBuilder("uuid:").append(UUID.hexFormat(UUID.getInt(timeLow), 8)).append('-').append(UUID.hexFormat(UUID.getInt(timeMid), 4)).append('-').append(UUID.hexFormat(UUID.getInt(timeHighAndVersion), 4)).append('-').append(UUID.hexFormat(UUID.getInt(clockSeqHiAndReserved), 2)).append(UUID.hexFormat(UUID.getInt(clockSeqLow), 2)).append('-').append(mFakeMACAddress);
return uuid.toString();
}
private static int getInt(byte[] bytes) {
int i = 0;
int j = 8 * (bytes.length - 1);
int k = 0;
while (j >= 0) {
int l = bytes[k] & 255;
i += l << j;
j -= 8;
++k;
}
return i;
}
private static String hexFormat(int i, int j) {
String s = Integer.toHexString(i);
return UUID.padHex(s, j) + s;
}
private static String padHex(String s, int i) {
StringBuilder tmpBuffer = new StringBuilder();
if (s.length() < i) {
for (int j = 0; j < i - s.length(); ++j) {
tmpBuffer.append('0');
}
}
return tmpBuffer.toString();
}
static {
try {
mSeeder = SecureRandom.getInstance("FIPS186PRNG", "JsafeJCE");
}
catch (NoSuchAlgorithmException e) {
mSeeder = new SecureRandom();
}
catch (NoSuchProviderException e) {
mSeeder = new SecureRandom();
}
}
}