Die Verschlüsselung kann dazu beitragen, Daten vor der Einsichtnahme und Änderung zu schützen und eine sichere Kommunikationsmöglichkeit über ansonsten unsichere Kanäle bereitzustellen. Beispielsweise können Daten mithilfe eines Verschlüsselungsalgorithmus verschlüsselt, verschlüsselt übertragen und anschließend vom vorgesehenen Empfänger entschlüsselt werden. Wenn ein Dritter verschlüsselte Daten abfängt, wird es schwierig, die Daten zu entschlüsseln.
Um diese Ziele zu erreichen, erstellen Sie Verschlüsselungsschemata mithilfe einer Kombination aus Algorithmen und Konventionen, sogenannten Verschlüsselungsprimitiven. Einschließlich Verschlüsselung mit privatem Schlüssel (symmetrische Verschlüsselung), Verschlüsselung mit öffentlichem Schlüssel (asymmetrische Verschlüsselung), kryptografische Signaturen und kryptografische Hashes.
Wir verwenden eine Public-Key-Verschlüsselung (asymmetrische Verschlüsselung), um den Registrierungscode-Algorithmus zu implementieren.
Bei der Public-Key-Verschlüsselung werden ein privater Schlüssel verwendet, der vor unbefugten Benutzern geheim gehalten werden muss, und ein öffentlicher Schlüssel, der jedem zugänglich gemacht werden kann. Sowohl öffentliche als auch private Schlüssel hängen mathematisch zusammen; mit dem öffentlichen Schlüssel verschlüsselte Daten können nur mit dem privaten Schlüssel entschlüsselt werden, während mit dem privaten Schlüssel signierte Daten nur mit dem öffentlichen Schlüssel verifiziert werden können.
Für den Registrierungscode verwenden wir den privaten Schlüssel zum Signieren einer Zeichenfolge (Benutzername) und verwenden dann den öffentlichen Schlüssel zum Überprüfen der Signatur (Registrierungscode). Da der öffentliche Schlüssel nur zur Überprüfung verwendet werden kann, können wir den öffentlichen Schlüssel vertraulich verteilen. Der private Schlüssel wird zum Signieren verwendet. Daher muss der private Schlüssel in den Händen des Entwicklers bleiben. Auf diese Weise wird der Zweck der Registrierungszertifizierung erreicht. Alle Software, die derzeit im Modus „Benutzername, Registrierungscode“ registriert wird, sollte diese Technologie verwenden.
Zuerst generieren wir einen öffentlichen Schlüssel und einen privaten Schlüssel, die wir verwenden möchten.
Private rsa As New Security.Cryptography.RSACryptoServiceProvider
Die RSACryptoServiceProvider-Klasse stellt eine Implementierung des RSA-Algorithmus zur Durchführung einer asymmetrischen Verschlüsselung und Entschlüsselung bereit. Die von uns benötigten öffentlichen und privaten Schlüssel können über ToXMLString generiert werden.
rsa.ToXmlString(False)
rsa.ToXmlString(True)
Wenn der Parameter False ist, wird nur der öffentliche Schlüssel generiert; wenn True, werden sowohl der öffentliche Schlüssel als auch der private Schlüssel generiert. Im Allgemeinen erhalten wir eine öffentliche Schlüsselzeichenfolge über ToXmlString(False); eine private Schlüsselzeichenfolge erhalten wir über ToXmlString(True) (obwohl diese den öffentlichen Schlüssel enthält). Wir können diese beiden Schlüssel auf dem lokalen Computer speichern, sie über String-Konstanten definieren und verwenden. Mit anderen Worten: Für unsere Registrierungsinformationen werden eindeutige öffentliche und private Schlüssel verwendet.
Anschließend signieren wir die angegebene Zeichenfolge mit dem öffentlichen und privaten Schlüssel.
rsa.FromXmlString(PRIVATE_KEY)
Dimmen Sie f als neue Sicherheit.Cryptography.RSAPKCS1SignatureFormatter(rsa)
f.SetHashAlgorithm("SHA1")
Dimmen Sie source() als Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(UID)
Dimmen Sie sha als neue Sicherheit .Cryptography.SHA1Managed
Dim result() As Byte = sha.ComputeHash(source)
Dim regkey() As Byte = f.CreateSignature(result)
SerialNumber = Convert.ToBase64String(regkey)
Initialisieren Sie das RSA-Objekt mit dem soeben erhaltenen privaten Schlüssel neu , und dann wird die Signatur über die Klasse RSAPKCS1SignatureFormatter ausgeführt. Wir konvertieren die Eingabezeichenfolge in ein Byte-Array (unser Standardbenutzername kann hier nur aus ASCII-Zeichen bestehen) und berechnen seinen Hashwert mithilfe des SHA1-Hashing-Algorithmus. Verwenden Sie dann die Methode CreateSignature, um den erhaltenen Hash-Wert zu signieren. Schließlich konvertieren wir das erhaltene Byte-Array in einen String als Registrierungscode. Dabei handelt es sich um den Prozess der Generierung eines Registrierungscodes. Wir können dieses Programm wiederverwenden, um verschiedene Benutzernamen zu signieren und unterschiedliche entsprechende Registrierungscodes zu erhalten.
Abschließend überprüfen wir den soeben erhaltenen Benutzernamen und Registrierungscode.
rsa.FromXmlString(PUBLIC_KEY)
Dim f As New Security.Cryptography.RSAPKCS1SignatureDeformatter(rsa)
f.SetHashAlgorithm("SHA1")
Dim key() As Byte = Convert.FromBase64String(SerialNumber)
Dim sha As New Security.Cryptography.SHA1Managed
Dim Name () As Byte = sha.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(UID))
Result = f.VerifySignature(name, key)
Dieses Mal verwenden wir den öffentlichen Schlüssel, um das RSA-Objekt zu initialisieren und dann die Signatur zu überprüfen über die RSAPKCS1SignatureDeformatter-Klasse. Wir konvertieren den erhaltenen Registrierungscode umgekehrt in ein Byte-Array und führen eine Hash-Berechnung für den Benutzernamen durch, um den Hash-Wert zu erhalten. Überprüfen Sie es abschließend mit VerifySignature.
Wie aus dem obigen Programm ersichtlich ist, ist zum Generieren eines Registrierungscodes ein privater Schlüssel erforderlich (der private Schlüssel wird von Informationen zum öffentlichen Schlüssel begleitet), und es kann eine beliebige Anzahl von Paaren aus Benutzername und Registrierungscode generiert werden. Mit dem öffentlichen Schlüssel können wir ihn nur verifizieren, aber nicht generieren. Daher kann der öffentliche Schlüssel zur Überprüfung sicher an alle Benutzer verteilt werden, der private Schlüssel jedoch nicht. Daher können der öffentliche Schlüssel und der Verifizierungsalgorithmus in der veröffentlichten Version enthalten sein. Denn selbst wenn der Benutzer den öffentlichen Schlüssel und den Verifizierungsalgorithmus erhält, kann dieser nicht einfach geknackt werden.
Die heute gängigen Registrierungsautomaten im Internet knacken weitgehend den privaten Schlüssel der Software und erreichen so eine unbegrenzte Generierung der erforderlichen Registrierungsinformationen. Wenn Benutzer Ihr Produkt jedoch dekompilieren und den Zwischencode ändern, wird die Registrierungsbeurteilungslogik umgangen. Dies ist kein Problem, das dieser Artikel lösen kann. Denn selbst wenn Sie Web-Service-Technologie für die Online-Aktivierung oder -Registrierung verwenden, können Sie die Serverinformationen durch Netzwerküberwachung analysieren und einen gefälschten Server simulieren.
http://www.cnblogs.com/farrio/archive/2006/12/01/579296.html