un po' di codice :
così leggevo l'id di windows ci vuole una libreria apposta (jRegistryKey.dll)
ma tu cmq l'id della macchina ce l'hai già
codice:
winID = controlloAccesso.letturaID("SOFTWARE\\Microsoft\\Windows\\CurrentVersion","ProductId");
winIDCrypt = controlloAccesso.encode(winID);
lo criptavo in un modo banale
codice:
// FUNZIONE PER ENCODE DI UNA STRINGA
public String encode(String stringToEncode){
String returnValue = "";
BASE64Encoder encrypt = new BASE64Encoder();
try{
String codedString = encrypt.encode(stringToEncode.getBytes());
returnValue = codedString;
} catch (Exception e) {
e.printStackTrace();
}
return returnValue;
}
il cliente mi diceva che siccome il programma non era registrato gli compariva il codice a video (quello appena criptato)
io gli generavo una chiave da quel codice con una funzione come questa e gliela fornivo
codice:
public String createKeyById(String cryptID){
String returnKey = "";
String singleChar;
int number = 0;
int somma = 0;
boolean sommaNumeri = false;
String winID = decode(cryptID);
// CONTROLLO LUNGHEZZA DEVE ESSERE PARI
if (winID.length() % 2 == 0){
}else{
winID = winID + "0";
}
// CICLO PER LA COSTRUZIONE DELLA KEY
for(int i=0;i<winID.length();i++){
// RECUPERO CARATTERE
singleChar = String.valueOf(winID.charAt(i));
// CONTROLLO / CONVERSIONE IN NUMERO
try{
number = Integer.parseInt(singleChar);
}catch(Exception e){
number = 0;
}
// SOMMA DEI NUMERI
if(sommaNumeri==false){
somma = number;
sommaNumeri = true;
}else{
somma = somma + number;
returnKey = returnKey + String.valueOf(somma);
sommaNumeri = false;
}
}
// CRYPT DELLA CHIAVE DI RITORNO
if(returnKey.equalsIgnoreCase("")){
}else{
returnKey = encode(returnKey);
}
return returnKey;
}
il cliente la inseriva (dove decidi tu, io lo mettevo in un file di configurazione)
ad ogni avvio il programma fa la stessa operazione che ho fatto io a mano e confronta se il codice del file di configurazione coincide.. se tutto ok prosegue..