View Full Version : [C#] creare una licenza
Salve, come da titolo vorrei creare una licenza per un programma
fatto in C# che dopo un tot di mesi scade ma non ho idea di come cominciare :confused:
sei troppo generico, come è costruita l'applicazione? ha una base dati da qualche parte? accede a qualche servizio tramite internet? e distribuita e viene utilizzata su una sola macchina?
se mi dai qualche info di più magari posso indicarti una strada
no non ha nessuna base di dati da nessuna parte,
in poche parole è un sofware che fa un download di alcuni programmi,
solo che vorrei che questi programmi che scarica dovranno avere
un limite di tempo e poi non dovrebbero più essere utilizzati.
beh puoi usare una chiave calcolata sulla macchina allora, puoi inventarti un algoritmo tuo o appoggiarti a qualcosa di già esistente.
Dovessi farlo io per una cosa così piccola prenderei il DateTime.Now e lo convertirei in stringa ci schianterei un carattere speciale subito dopo tipo % e ci attaccherei anche l'id del processore:
string cpuInfo = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc)
{
if (cpuInfo == "")
{
//Get only the first CPU's ID
cpuInfo = mo.Properties["processorID"].Value.ToString();
break;
}
}
return cpuInfo;
a questo punto crypterei la stringa ottenuta (in realtà non è una vera pryptazione perchè rimane reversibile) e la salverei in una chiave del registro o in un file xml sulla macchina:
public static string EncryptString(string Message, string Passphrase)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToEncrypt = UTF8.GetBytes(Message);
try
{
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return Convert.ToBase64String(Results);
}
a questo punto ad ogni apertura del programma vai a leggerti questa stringa criptata e la decrypti
public static string DecryptString(string Message, string Passphrase)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToDecrypt = Convert.FromBase64String(Message);
try
{
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return UTF8.GetString( Results );
}
splitti per il carattere speciale che hai usato il risultato della decriptazione (% nel nostro esempio) e controllo che l'id del processore sia lo stesso e che la data rispetti quello che hai stabilito tu, in caso contrario implementi le tue logiche (chiudi l'applicazione, lo mandi su un sito ecc ecc....)
Spero di averti dato una idea.
Ovviamente è un sistema un pò deboluccio ma mi pare che tu non abbia grosse esigenze.
Vorrei fare una cosa del genere in C#:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim key As String = "x9xxVAQXINExx6x" 'Specifia la licenza Key
Dim licence As RegistryKey = Registry.CurrentUser.CreateSubKey("software\vaqxine", RegistryKeyPermissionCheck.Default)
If licence.GetValue("licence") Is Nothing Then
Dim input As String = InputBox("Inserisci la tua licenza", "Per favore registra il suo programma!")
If input <> key Then
MsgBox("per favore premi OK per convalidare la Licenza Key!", MsgBoxStyle.Exclamation, "Key invalida!")
End
Else
licence.SetValue("licence", key)
MsgBox("Clicca Ok per continuare", MsgBoxStyle.Information, "Accettata la licenza!")
End If
ElseIf licence.GetValue("licence") <> key Then
Dim input As String = InputBox("Enter your registration key", "La vostra licenza è valida")
If input <> key Then
MsgBox("per favore premi OK per convalidare la Licenza Key!", MsgBoxStyle.Exclamation, "Key invalida!")
End
Else
licence.SetValue("licence", key)
MsgBox("Clicca Ok per continuare", MsgBoxStyle.Information, "Registrazione key accettata")
End If
End If
licence.Close()
End Sub
End Class
Che però, dovrebbe fare in modo che dopo un tot di giorni scade.
Qualcuno sa darmi una mano? :D
ma hai letto quello che ho scritto???
nel mio esempio hai modo di valutare in qualsiasi momento in che data è stato registrato il software.
e quindi hai modo di bloccarlo se sono passati tot giorni/mesi/anni
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.