Bueno gente la cosa es asi, tengo una aplicacion que se conecta al registro de la maquina mediante WMI (usando la libreria de com4j), y leeo el DigitalProductId del sistema operativo, esto me devuelve un vector del tipo Object[] pero con valres binarios. El problema es que tengo que manipular ese vector e ir creando la clave de windows, he encontrado varios ejemplos en visual basic pero al traducirlos a java no funcionan correctamente. Adjunto los codigos y les agradeceria si alguien me puede dar una mano! Gracias
Codigo escrito en Visual.
Código:
Function GetKey(rpk)
Const rpkOffset=52:i=28
szPossibleChars="BCDFGHJKMPQRTVWXY2346789"
Do
dwAccumulator=0 : j=14
Do
dwAccumulator=dwAccumulator*256
dwAccumulator=rpk(j+rpkOffset)+dwAccumulator
rpk(j+rpkOffset)=(dwAccumulator\24) and 255
dwAccumulator=dwAccumulator Mod 24
j=j-1
Loop While j>=0
i=i-1 : szProductKey=mid(szPossibleChars,dwAccumulator+1,1)&szProductKey
if (((29-i) Mod 6)=0) and (i<>-1) then
i=i-1 : szProductKey="-"&szProductKey
End If
Loop While i>=0
GetKey=szProductKey
End Function
Mi traduccion en JAVA.
Código:
public static String convertirCalveMSWindows(Object[] rpk) {
String clave = "N/A";
if (rpk.length != 0) {
int rpkOffset = 52;
int i = 28;
String szPossibleChars = "BCDFGHJKMPQRTVWXY2346789";
clave = "";
while (i >= 0) {
int dwAccumulator = 0;
int j = 14;
while (j >= 0) {
dwAccumulator = dwAccumulator * 256;
int val = Integer.parseInt(rpk[j + rpkOffset].toString());
dwAccumulator = val + dwAccumulator;
rpk[j + rpkOffset] = (dwAccumulator / 24) + 255;
dwAccumulator = dwAccumulator % 24;
j = j - 1;
}
i = i - 1;
clave = clave + szPossibleChars.charAt(dwAccumulator);
if ((29 - i) % 6 == 0 && i != -1) {
i = i - 1;
clave += "-";
}
}
}
return clave;
}