Ich suche nach einer sehr einfachen Verschleierungsfunktion (wie Ver- und Entschlüsseln, aber nicht unbedingt sicher) für einige Daten. Es ist nicht geschäftskritisch. Ich brauche etwas, um ehrliche Leute ehrlich zu halten, aber etwas, das etwas stärker ist als ROT13 oder Base64 .
Ich würde etwas bevorzugen, das bereits in .NET Framework 2.0 enthalten ist, damit ich mir keine Gedanken über externe Abhängigkeiten machen muss.
Ich möchte wirklich nicht mit öffentlichen / privaten Schlüsseln usw. herumspielen müssen. Ich weiß nicht viel über Verschlüsselung, aber ich weiß genug, um zu wissen, dass alles, was ich geschrieben habe, weniger als wertlos wäre ... Ich würde wahrscheinlich die Mathematik vermasseln und es trivial machen, zu knacken.
c#
obfuscation
Matt Dawdy
quelle
quelle
Antworten:
Andere Antworten funktionieren hier einwandfrei, aber AES ist ein sicherer und aktueller Verschlüsselungsalgorithmus. Dies ist eine Klasse, die ich vor einigen Jahren erhalten habe, um eine AES-Verschlüsselung durchzuführen, die ich im Laufe der Zeit geändert habe, um sie für Webanwendungen benutzerfreundlicher zu gestalten (z. B. habe ich Verschlüsselungs- / Entschlüsselungsmethoden erstellt, die mit URL-freundlichen Zeichenfolgen arbeiten). Es hat auch die Methoden, die mit Byte-Arrays arbeiten.
HINWEIS: Sie sollten unterschiedliche Werte in den Arrays Key (32 Byte) und Vector (16 Byte) verwenden! Sie möchten nicht, dass jemand Ihre Schlüssel herausfindet, indem Sie einfach davon ausgehen, dass Sie diesen Code unverändert verwendet haben! Alles, was Sie tun müssen, ist, einige der Zahlen (muss <= 255 sein) in den Schlüssel- und Vektor-Arrays zu ändern (ich habe einen ungültigen Wert im Vektor-Array hinterlassen, um sicherzustellen, dass Sie dies tun ...). Sie können https://www.random.org/bytes/ verwenden , um auf einfache Weise einen neuen Satz zu generieren:
Key
Vector
Die Verwendung ist einfach: Instanziieren Sie einfach die Klasse und rufen Sie dann (normalerweise) EncryptToString (Zeichenfolge StringToEncrypt) und DecryptString (Zeichenfolge StringToDecrypt) als Methoden auf. Es könnte nicht einfacher (oder sicherer) sein, wenn Sie diese Klasse eingerichtet haben.
quelle
Ich habe SimpleAES (oben) für meinen Gebrauch aufgeräumt. Problem mit verschlungenen Verschlüsselungs- / Entschlüsselungsmethoden behoben; getrennte Methoden zum Codieren von Bytepuffern, Zeichenfolgen und URL-freundlichen Zeichenfolgen; vorhandene Bibliotheken für die URL-Codierung verwendet.
Der Code ist klein, einfacher, schneller und die Ausgabe ist präziser. Zum Beispiel
[email protected]
erzeugt:Code:
quelle
Ja, fügen Sie die
System.Security
Assembly hinzu und importieren Sie denSystem.Security.Cryptography
Namespace. Hier ist ein einfaches Beispiel für eine symmetrische (DES) Algorithmusverschlüsselung:quelle
Ich dachte nur, ich würde hinzufügen, dass ich Muds SimplerAES verbessert habe, indem ich eine zufällige IV hinzugefügt habe, die innerhalb der verschlüsselten Zeichenfolge zurückgegeben wird. Dies verbessert die Verschlüsselung, da die Verschlüsselung derselben Zeichenfolge jedes Mal zu einer anderen Ausgabe führt.
Und Bonus-Unit-Test
quelle
System.Random
als RNG verwenden. 2) Dies ist völlig gegen ausgewählte Chiffretext-Angriffe (insbesondere Padding-Orakel)Eine Variante von Marks (ausgezeichnete) Antwort
Hoffe das hilft
quelle
[BEARBEITEN] Jahre später bin ich zurückgekommen, um zu sagen: Tu das nicht! Siehe Was stimmt nicht mit der XOR-Verschlüsselung? für Details.
Eine sehr einfache, einfache bidirektionale Verschlüsselung ist die XOR-Verschlüsselung.
mypass
.mypassmypassmypass...
)mypassmypassmypass...
).quelle
Ich habe das, was ich am besten fand, aus mehreren Antworten und Kommentaren kombiniert.
Code:
Update 18.07.2015: Fehler in der privaten Encrypt () -Methode durch Kommentare von @bpsilver und @Evereq behoben. IV wurde versehentlich verschlüsselt und wird nun wie von Decrypt () erwartet im Klartext vorangestellt.
quelle
return _encryptor.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
byte [] inputBuffer = _encryptor.TransformFinalBlock(buffer, 0, buffer.Length); return _rijndael.IV.Concat(inputBuffer).ToArray();
Wenn Sie nur eine einfache Verschlüsselung wünschen (dh ein entschlossener Cracker kann brechen, aber die meisten Gelegenheitsbenutzer ausschließen), wählen Sie einfach zwei Passphrasen gleicher Länge aus, z. B.:
und xoder Ihre Daten mit beiden (Schleifen der Passphrasen, falls erforderlich) (a) . Zum Beispiel:
Jemand, der Ihre Binärdatei durchsucht, glaubt möglicherweise, dass der DNA-String ein Schlüssel ist, aber es ist unwahrscheinlich, dass der C-Code etwas anderes als nicht initialisierter Speicher ist, der mit Ihrer Binärdatei gespeichert wurde.
(a) Beachten Sie, dass dies eine sehr einfache Verschlüsselung ist und nach einigen Definitionen überhaupt nicht als Verschlüsselung angesehen werden kann (da die Absicht der Verschlüsselung darin besteht, dies zu verhindern unbefugten Zugriff anstatt ihn nur zu erschweren). Obwohl natürlich selbst die stärkste Verschlüsselung unsicher ist, wenn jemand mit einem Stahlrohr über den Schlüsselhaltern steht.
Wie im ersten Satz erwähnt, ist dies ein Mittel, um es dem zufälligen Angreifer so schwer zu machen, dass er weiterziehen wird. Es ist ähnlich wie bei der Verhinderung von Einbrüchen in Ihrem Haus - Sie müssen es nicht uneinnehmbar machen, Sie müssen es nur weniger schwanger machen als das Haus nebenan :-)
quelle
Die Verschlüsselung ist einfach: Wie andere bereits betont haben, gibt es im System.Security.Cryptography-Namespace Klassen, die die gesamte Arbeit für Sie erledigen. Verwenden Sie sie anstelle einer selbst entwickelten Lösung.
Die Entschlüsselung ist aber auch einfach. Das Problem, das Sie haben, ist nicht der Verschlüsselungsalgorithmus, sondern der Schutz des Zugriffs auf den zur Entschlüsselung verwendeten Schlüssel.
Ich würde eine der folgenden Lösungen verwenden:
DPAPI unter Verwendung der ProtectedData-Klasse mit CurrentUser-Bereich. Dies ist einfach, da Sie sich keine Sorgen um einen Schlüssel machen müssen. Daten können nur von demselben Benutzer entschlüsselt werden, daher ist es nicht gut, Daten zwischen Benutzern oder Computern auszutauschen.
DPAPI unter Verwendung der ProtectedData-Klasse mit LocalMachine-Bereich. Gut zum Beispiel zum Schutz von Konfigurationsdaten auf einem einzelnen sicheren Server. Aber jeder, der sich am Computer anmelden kann, kann ihn verschlüsseln, was nur dann gut ist, wenn der Server sicher ist.
Beliebiger symmetrischer Algorithmus. Normalerweise verwende ich die statische SymmetricAlgorithm.Create () -Methode, wenn es mir egal ist, welcher Algorithmus verwendet wird (tatsächlich ist es standardmäßig Rijndael). In diesem Fall müssen Sie Ihren Schlüssel irgendwie schützen. Zum Beispiel können Sie es auf irgendeine Weise verschleiern und in Ihrem Code verstecken. Beachten Sie jedoch, dass jeder, der klug genug ist, Ihren Code zu dekompilieren, wahrscheinlich den Schlüssel finden kann.
quelle
Ich wollte meine Lösung veröffentlichen, da keine der oben genannten Lösungen so einfach ist wie meine. Lass mich wissen was du denkst:
Optional
Dies setzt voraus, dass der MachineKey des Servers, der zum Verschlüsseln des Werts verwendet wird, mit demjenigen identisch ist, der zum Entschlüsseln des Werts verwendet wird. Falls gewünscht, können Sie in der Web.config einen statischen MachineKey angeben, damit Ihre Anwendung Daten unabhängig davon entschlüsseln / verschlüsseln kann, unabhängig davon, wo sie ausgeführt werden (z. B. Entwicklung vs. Produktionsserver). Sie können einen statischen Maschinenschlüssel gemäß diesen Anweisungen generieren .
quelle
Der Namespace
System.Security.Cryptography
enthält dasTripleDESCryptoServiceProvider
undRijndaelManaged
KlassenVergessen Sie nicht, einen Verweis auf die
System.Security
Baugruppe hinzuzufügen .quelle
Verwenden von TripleDESCryptoServiceProvider in System.Security.Cryptography :
quelle
Ich änderte dies :
dazu:
quelle
In diesem Beispiel wird anhand der integrierten .Net Cryptography-Bibliothek die Verwendung des Advanced Encryption Standard (AES) gezeigt.
quelle
Ich weiß, dass Sie gesagt haben, dass es Ihnen egal ist, wie sicher es ist, aber wenn Sie sich für DES entschieden haben, können Sie auch AES wählen, es ist die aktuellere Verschlüsselungsmethode.
quelle
Ich habe die akzeptierte Antwort von Mark Brittingham verwendet und sie hat mir sehr geholfen. Vor kurzem musste ich verschlüsselten Text an eine andere Organisation senden, und dort traten einige Probleme auf. Das OP benötigt diese Optionen nicht, aber da dies eine beliebte Frage ist, veröffentliche ich meine Änderung (
Encrypt
undDecrypt
die von hier ausgeliehenen Funktionen ):RijndaelManaged
und einen, in dem Eigenschaftswerte angegeben werden können (basierend auf der gegenseitigen Vereinbarung zwischen Verschlüsselungs- und Entschlüsselungsparteien).Hier ist die Klasse (Testbeispiel am Ende):
und..
Hier ist das Testbeispiel:
quelle
Ich denke, das ist die einfachste der Welt!
Prüfung
quelle