Je sais que je suis en retard, mais je vais quand même donner mes conseils au cas où quelqu'un d'autre qui en aurait besoin se retrouve ici.
Pour empêcher son utilisation sur un autre PC, vous pouvez probablement utiliser l'adresse MAC ou l'adresse matérielle. Cependant, cela dépend du matériel réseau restant disponible lors de la vérification du mot de passe. Veuillez vous assurer que vous utilisez l'adresse matérielle de la machine où le mot de passe sera vérifié. Pour limiter la date d'expiration, il suffit d'utiliser la chaîne de texte de la date d'expiration. Il suffit d'utiliser une fonction de hachage pour hacher la date d'expiration de la moissonneuse-batteuse, l'adresse matérielle et une clé secrète. Préfixe ou suffixe la sortie de hachage avec la date d'expiration.
private void GeneratePassword(string prefix)
{
string secretKey = "MySecretKey";
System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
byte[] preHash = System.Text.Encoding.UTF32.GetBytes(prefix + secretKey + GetBase64Mac());
byte[] hash = sha.ComputeHash(preHash);
string password = prefix + System.Convert.ToBase64String(hash);
return password;
}
Dans le cas ci-dessus, je préfixer le hash avec la date de péremption. Ainsi, lorsque nous vérifions le mot de passe, nous extrayons simplement la date d'expiration du mot de passe, utilisons la même fonction pour générer le même mot de passe. Si le mot de passe généré correspond au mot de passe fourni, vous avez le feu vert.
private void TestPassword()
{
int duration = 15; // in days
string prefix = GetExpiryDate(DateTime.Today.AddDays(duration));
string generated = GeneratePassword(prefix);
// Positive test
string testPrefix = generated.Substring(0, 8);
string testPassword = GeneratePassword(testPrefix);
if (generated != TestPassword)
return false;
// Negative test
generated[2] = '2';
generated[12] = 'b';
testPrefix = generated.Substring(0, 8);
testPassword = GeneratePassword(testPrefix);
if (generated != TestPassword)
return true;
return false;
}
mot de passe Exemple de sortie:
20110318k3X3GEDvP0LkBN6zCrkijIE + snc =
Si vous ne pouvez pas obtenir l'adresse du matériel, puis utilisez simplement le nom du client.Cela n'empêchera pas l'utilisation du mot de passe sur plusieurs machines, mais assurera que la même personne l'utilise.
Peut-être que j'aurais dû dire la clé au lieu du mot de passe. Il n'y a pas de nom d'utilisateur et je ne veux pas générer les mots de passe à l'avance. – parsley72