Lizenzen werden im Bereich Kundenverwaltung im Unterabschnitt Lizenzen verwaltet. Neue Lizenzen kann man über die rechte Maustaste (Popupmenü) umbenennen, löschen oder hinzufügen.

Klickt man in der Lizenzliste eine Lizenz an so erscheinen im unteren Teil des Fensters die Details. Code1 (E-Mail des Kunden), Code2 (Lizenzname des Produktes), Von und Bis dienen als Eingangsdaten zur Lizenzgenerierung. Key1-3 werden vom Lizenzgenerator erzeugt (der mitgelieferte Generator erzeugt nur Key1). Verwendung des mitgelieferten Generators:
Aus dem Code1 und Code2 wird ein Key1 generiert, welcher dem Kunden als Lizenzcode zusammen mit Code1 geliefert wird.
Mit dem Key1 und dem Code1 kann der Code2 zur Lizenzüberprüfung wieder restauriert werden. D.h. der Kunde gibt zur Lizenzvalidierung den Code1 und den Key1 ein.
Man kann natürlich auch einen eigenen Lizenzgenerator benutzen wenn man diesen in der Skriptdatei LicenseGen.xml einfügt. Hier der Code zur Einbindung in eigene Programme:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace <YOURNAMESPACE>
{
///
/// Usage to create a key:
/// * Create a passphrase (string phrase="myproduct_mymail@mymail.com";)
/// * Create a internal key using the passphrase (GenerateKey(phrase))
/// * Create a productstring
/// product=namevalue;version=versionvalue;expires=datevalue
/// namevalue==name of product (must not contain any ';' or '='
/// versionvalue==version value (e.g. "1.1")
/// datevalue==datetime to expire
/// * Create the Licensekey using Encrypt (Encrypt(productstring))
/// The passphrase must contain something related to product AND owner (e.g. productname + email)
/// The Productkey identifies the product, version and expireationdate
///
/// Usage to check if a key is valid
/// * Create a passphrase (phrase)
/// * Create a internal key using the passphrase (GenerateKey(phrase))
/// * Descrypt the key (given by user) productstring=Decrypt(key)
/// * productstring is a string of format see above
/// * use GetProduct(productstring), GetVersion(productstring) and GetExpires(productstring)
/// to check if key is valid
///
public class License
{
private byte[]_key;
private byte[]_iv;
///
/// Checks if the license string is valid
///
///
/// Name of the Product (lizenzname)
/// Version of the product
/// true if license is valid
public bool IsValid(string licenseText,string product,string version)
{
string []typevals; // all type value pairs
string []values; // splitted type and value
bool lic=false;
try
{
typevals=licenseText.Split(";".ToCharArray(),10);
foreach(string typeval in typevals)
{
values=typeval.Split("=".ToCharArray(),2);
if(values[0]=="prod")
{
if(values[1]==product)
lic=true;
else
{
lic=false;
break;
}
}
if(values[0]=="ver")
{
if(values[1]==version)
lic=true;
else
{
lic=false;
break;
}
}
if(values[0]=="exp")
{
}
}
}
catch(Exception)
{
return false;
}
return lic;
}
///
/// Extracts the version from a license string
///
///
///
public string GetVersion(string license)
{
string []typevals; // all type value pairs
string []values; // slitted type and value
string version="";
try
{
typevals=license.Split(";".ToCharArray(),10);
foreach(string typeval in typevals)
{
values=typeval.Split("=".ToCharArray(),2);
if(values[0]=="ver")
{
version=values[1];
}
}
}
catch(Exception )
{
return "";
}
return version;
}
///
/// Extracts the expires string from a license text
///
/// License string
/// Expireationdate
public string GetExpires(string license)
{
string []typevals; // all type value pairs
string []values; // slitted type and value
string expires="";
try
{
typevals=license.Split(";".ToCharArray(),10);
foreach(string typeval in typevals)
{
values=typeval.Split("=".ToCharArray(),2);
if(values[0]=="exp")
{
expires=values[1];
}
}
}
catch(Exception )
{
return "";
}
return expires;
}
///
/// Extracts the product name from a licence string
///
///
///
public string GetProduct(string license)
{
string []typevals; // all type value pairs
string []values; // slitted type and value
string product="";
try
{
typevals=license.Split(";".ToCharArray(),10);
foreach(string typeval in typevals)
{
values=typeval.Split("=".ToCharArray(),2);
if(values[0]=="prod")
{
product=values[1];
}
}
}
catch(Exception )
{
return "";
}
return product;
}
///
/// Generates a key from a passphrase using SHA384
///
/// Passphrase for key generation input
public void GenerateKey(string passPhrase)
{
// may want to change how you create your key and IV?
// They are the most important part to the secuity of your licenses.
_key = new Byte[24];
_iv = new Byte[16];
byte[] bytePhrase = Encoding.ASCII.GetBytes(passPhrase);
SHA384Managed sha384 = new SHA384Managed();
sha384.ComputeHash(bytePhrase);
byte[] result = sha384.Hash;
for( int loop=0; loop<24; loop++ ) _key[loop] = result[loop];
for( int loop=24; loop<40; loop++ ) _iv[loop-24] = result[loop];
}
///
/// Encrypt the given value with the Rijndael algorithm.
///
/// Value to encrypt
/// Encrypted value.
public string Encrypt(string encryptValue)
{
CryptoStream encryptStream = null; // Stream used to encrypt
RijndaelManaged rijndael = null; // Rijndael provider
ICryptoTransform rijndaelEncrypt = null; // Encrypting object
MemoryStream memStream = new MemoryStream(); // Stream to contain data
try
{
if( encryptValue.Length > 0 )
{
// Create the crypto objects
rijndael = new RijndaelManaged();
rijndael.Key = _key;
rijndael.IV = _iv;
rijndaelEncrypt = rijndael.CreateEncryptor();
encryptStream = new CryptoStream(
memStream, rijndaelEncrypt, CryptoStreamMode.Write);
// Write the encrypted value into memory
byte[] input = new UnicodeEncoding().GetBytes(encryptValue);
encryptStream.Write(input, 0, input.Length);
encryptStream.FlushFinalBlock();
// Retrieve the encrypted value and return it
return( Convert.ToBase64String(memStream.ToArray()) );
}
else
{
return "";
}
}
catch (Exception ex)
{
throw new ApplicationException(ml.ml_string(6, "Konnte Lizenz nicht verschlüsseln"), ex);
}
finally
{
if( rijndael != null ) rijndael.Clear();
if( rijndaelEncrypt != null ) rijndaelEncrypt.Dispose();
if( memStream != null ) memStream.Close();
}
}
///
///
///
///
///
public string Decrypt(string decryptValue)
{
CryptoStream decryptStream = null; // Stream used to decrypt
RijndaelManaged rijndael = null; // Rijndael provider
ICryptoTransform rijndaelDecrypt = null; // Decrypting object
MemoryStream memStream = new MemoryStream(); // Stream to contain data
MemoryStream memCypherStream = null;
try
{
if( decryptValue.Length > 0 )
{
// Create the crypto objects
rijndael = new RijndaelManaged();
rijndael.Key = _key;
rijndael.IV = _iv;
rijndaelDecrypt = rijndael.CreateDecryptor();
memCypherStream = new MemoryStream(Convert.FromBase64String(decryptValue));
decryptStream = new CryptoStream(memCypherStream,rijndaelDecrypt, CryptoStreamMode.Read);
do
{
Byte[] buf = new byte[100];
int actualBytesRead = decryptStream.Read(buf,0,100);
if (0 == actualBytesRead){break;}
memStream.Write(buf,0,actualBytesRead);
}while(true);
return new UnicodeEncoding().GetString(memStream.ToArray());
}
else
{
return "";
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("License.Decrypt",ex.Message);
string error=ml.ml_string(7, "Konnte Lizenz nicht entschlüsseln");
throw new ApplicationException(error);
}
finally
{
if( rijndael != null ) rijndael.Clear();
if( rijndaelDecrypt != null ) rijndaelDecrypt.Dispose();
if( memStream != null ) memStream.Close();
if( memCypherStream != null) memCypherStream.Close();
}
}
}
}
|
Letzte Änderung:
14.10.06 |