Le cryptage peut contribuer à protéger les données contre la visualisation et la modification, et peut contribuer à fournir un moyen de communication sécurisé sur des canaux autrement non sécurisés. Par exemple, les données peuvent être cryptées à l'aide d'un algorithme de cryptage, transmises dans un état crypté, puis déchiffrées par le destinataire prévu. Si un tiers intercepte des données cryptées, il sera difficile de les décrypter.
Pour atteindre ces objectifs, vous créez des schémas de chiffrement à l’aide d’une combinaison d’algorithmes et de conventions, appelés primitives de chiffrement. Y compris le cryptage à clé privée (cryptage symétrique), le cryptage à clé publique (cryptage asymétrique), les signatures cryptographiques et les hachages cryptographiques.
Nous utilisons le cryptage à clé publique (cryptage asymétrique) pour mettre en œuvre l'algorithme du code d'enregistrement.
Le chiffrement à clé publique utilise une clé privée qui doit rester secrète pour les utilisateurs non autorisés et une clé publique qui peut être rendue publique à tous. Les clés publiques et privées sont mathématiquement liées : les données chiffrées avec la clé publique ne peuvent être déchiffrées qu'avec la clé privée, tandis que les données signées avec la clé privée ne peuvent être vérifiées qu'avec la clé publique.
Pour le code d'enregistrement, nous utilisons la clé privée pour signer une chaîne (nom d'utilisateur), puis utilisons la clé publique pour vérifier la signature (code d'enregistrement). Puisque la clé publique ne peut être utilisée qu'à des fins de vérification, nous pouvons distribuer la clé publique en toute confiance ; la clé privée est utilisée pour la signature, elle doit donc être conservée entre les mains du développeur. De cette façon, l’objectif de la certification d’enregistrement est atteint. Tous les logiciels actuellement enregistrés en mode « nom d'utilisateur, code d'enregistrement » devraient utiliser cette technologie.
Nous générons d’abord une clé publique et une clé privée que nous souhaitons utiliser.
Rsa privé comme nouveau Security.Cryptography.RSACryptoServiceProvider
La classe RSACryptoServiceProvider fournit une implémentation de l'algorithme RSA pour effectuer un chiffrement et un déchiffrement asymétriques. Les clés publiques et privées dont nous avons besoin peuvent être générées via ToXMLString.
rsa.ToXmlString(False)
rsa.ToXmlString(True)
Lorsque le paramètre est False, seule la clé publique sera générée ; lorsque True, la clé publique et la clé privée seront générées. Nous obtenons généralement une chaîne de clé publique via ToXmlString(False) ; nous obtenons une chaîne de clé privée via ToXmlString(True) (bien qu'elle contienne la clé publique). Nous pouvons enregistrer ces deux clés sur la machine locale, les définir et les utiliser via des constantes de chaîne. En d’autres termes, nos informations d’enregistrement utiliseront des clés publiques et privées uniques.
Nous signons ensuite la chaîne spécifiée avec les clés publique et privée.
rsa.FromXmlString(PRIVATE_KEY)
Dim f Comme nouveau Security.Cryptography.RSAPKCS1SignatureFormatter(rsa)
f.SetHashAlgorithm("SHA1")
Dim source() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(UID)
Dim sha Comme nouvelle sécurité .Cryptography.SHA1Managed
Dim result() As Byte = sha.ComputeHash(source)
Dim regkey() As Byte = f.CreateSignature(result)
SerialNumber = Convert.ToBase64String(regkey)
Réinitialisez l'objet rsa avec la clé privée que vous venez d'obtenir , puis la signature est effectuée via la classe RSAPKCS1SignatureFormatter. Nous convertissons la chaîne d'entrée en un tableau d'octets (notre nom d'utilisateur par défaut ici ne peut être composé que de caractères ASCII) et calculons sa valeur de hachage via l'algorithme de hachage SHA1. Utilisez ensuite la méthode CreateSignature pour signer la valeur de hachage obtenue. Enfin, nous convertissons le tableau d'octets obtenu en une chaîne comme code d'enregistrement. Il s'agit du processus de génération d'un code d'enregistrement. Nous pouvons réutiliser ce programme pour signer différents noms d'utilisateur afin d'obtenir différents codes d'enregistrement qui leur correspondent.
Enfin, nous vérifions le nom d'utilisateur et le code d'enregistrement que nous venons d'obtenir.
rsa.FromXmlString(PUBLIC_KEY)
Dim f Comme nouveau Security.Cryptography.RSAPKCS1SignatureDeformatter(rsa)
f.SetHashAlgorithm("SHA1")
Dim key() As Byte = Convert.FromBase64String(SerialNumber)
Dim sha Comme nouveau Security.Cryptography.SHA1Managed
Dim nom () As Byte = sha.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(UID))
Result = f.VerifySignature(name, key)
Cette fois, nous utilisons la clé publique pour initialiser l'objet rsa, puis vérifions la signature via la classe RSAPKCS1SignatureDeformatter . Nous convertissons inversement le code d'enregistrement obtenu en un tableau d'octets et effectuons un calcul de hachage sur le nom d'utilisateur pour obtenir la valeur de hachage. Enfin, vérifiez-le via VerifySignature.
Comme le montre le programme ci-dessus, une clé privée est requise pour générer un code d'enregistrement (la clé privée est accompagnée d'informations sur la clé publique), et un nombre illimité de paires de nom d'utilisateur et de code d'enregistrement peuvent être générées. Avec la clé publique, nous pouvons uniquement vérifier mais pas générer. Par conséquent, la clé publique peut être distribuée en toute sécurité à tous les utilisateurs pour vérification, mais pas la clé privée. Par conséquent, la clé publique et l’algorithme de vérification peuvent être inclus dans la version publiée. Car même si l’utilisateur obtient la clé publique et l’algorithme de vérification, ceux-ci ne peuvent pas être facilement déchiffrés.
Les machines d'enregistrement les plus populaires sur Internet déchiffrent aujourd'hui en grande partie la clé privée du logiciel, permettant ainsi une génération illimitée des informations d'enregistrement requises. Mais si les utilisateurs décompilent votre produit et modifient le code intermédiaire, cela contournera la logique de jugement d'enregistrement. Ce n’est pas un problème que cet article peut résoudre. Car même si vous utilisez la technologie de service Web pour l'activation ou l'enregistrement en ligne, vous pouvez toujours analyser les informations du serveur via l'écoute réseau et simuler un faux serveur.
http://www.cnblogs.com/farrio/archive/2006/12/01/579296.html