Ich muss eine Zeichenfolge verschlüsseln, die im 2D-Barcode (PDF-417) angezeigt wird. Wenn also jemand eine Idee zum Scannen hat, ist sie nicht lesbar.
Andere Vorraussetzungen:
- sollte nicht kompliziert sein
- Es sollte nicht aus RSA, PKI-Infrastruktur, Schlüsselpaaren usw. bestehen.
Es muss einfach genug sein, um die herumschnüffelnden Leute loszuwerden, und für andere Unternehmen, die daran interessiert sind, diese Daten zu erhalten, leicht zu entschlüsseln. Sie rufen uns an, wir teilen ihnen den Standard mit oder geben ihnen einen einfachen Schlüssel, der dann zur Entschlüsselung verwendet werden kann.
Wahrscheinlich könnten diese Unternehmen unterschiedliche Technologien verwenden, daher wäre es gut, sich an einen Standard zu halten, der nicht an eine spezielle Plattform oder Technologie gebunden ist.
Was schlagen Sie vor? Gibt es eine Java - Klasse zu tun encrypt()
und decrypt()
ohne viel Komplikation bei der Erreichung hoher Sicherheitsstandards?
quelle
Antworten:
Vorwort
Ich werde im Folgenden die Grundlagen der sicheren symmetrischen Kryptographie skizzieren und auf häufige Fehler hinweisen, die ich online sehe, wenn Leute Krypto selbst mit der Standard-Java-Bibliothek implementieren. Wenn Sie nur alle Details überspringen möchten, die in die neue Google-Bibliothek Tink übertragen wurden, importieren Sie diese in Ihr Projekt und verwenden Sie den AES-GCM-Modus für alle Ihre Verschlüsselungen. So sind Sie sicher.
Wenn Sie nun die wichtigsten Details zum Verschlüsseln in Java erfahren möchten, lesen Sie weiter :)
Blockchiffren
Als erstes müssen Sie einen Blockchiffre mit symmetrischem Schlüssel auswählen. Eine Blockverschlüsselung ist eine Computerfunktion / ein Computerprogramm, mit dem Pseudozufälligkeit erzeugt wird. Pseudozufälligkeit ist eine gefälschte Zufälligkeit, die kein anderer Computer als ein Quantencomputer in der Lage wäre, den Unterschied zwischen ihm und der realen Zufälligkeit zu erkennen. Die Blockverschlüsselung ist wie der Baustein für die Kryptografie, und wenn sie mit verschiedenen Modi oder Schemata verwendet wird, können wir Verschlüsselungen erstellen.
Nun in Bezug auf Block - Cipher Algorithmen heute verfügbar, Achten Sie darauf, nie , ich wiederhole NIE verwenden DIE , ich würde sogar sagen nie verwenden 3DES . Die einzige Blockverschlüsselung, mit der sogar die NSA-Version von Snowden nachweisen konnte, dass sie Pseudo-Random so nahe wie möglich kommt, ist AES 256 . Es gibt auch AES 128; Der Unterschied besteht darin, dass AES 256 in 256-Bit-Blöcken arbeitet, während AES 128 in 128 Blöcken arbeitet. Alles in allem gilt AES 128 als sicher, obwohl einige Schwachstellen entdeckt wurden, aber 256 ist so solide wie es nur geht.
Unterhaltsame Tatsache DES wurde von der NSA bei ihrer Gründung gebrochen und tatsächlich einige Jahre lang geheim gehalten. Obwohl einige Leute immer noch behaupten, 3DES sei sicher, gibt es einige Forschungsarbeiten, die Schwachstellen in 3DES gefunden und analysiert haben .
Verschlüsselungsmodi
Die Verschlüsselung wird erstellt, wenn Sie eine Blockverschlüsselung verwenden und ein bestimmtes Schema verwenden, sodass die Zufälligkeit mit einem Schlüssel kombiniert wird, um etwas zu erstellen, das reversibel ist, solange Sie den Schlüssel kennen. Dies wird als Verschlüsselungsmodus bezeichnet.
Hier ist ein Beispiel für einen Verschlüsselungsmodus und den einfachsten Modus, der als EZB bezeichnet wird, damit Sie visuell verstehen können, was passiert:
Die Verschlüsselungsmodi, die Sie am häufigsten online sehen, sind die folgenden:
EZB CTR, CBC, GCM
Es gibt andere als die aufgeführten Modi, und die Forscher arbeiten ständig an neuen Modi, um bestehende Probleme zu verbessern.
Kommen wir nun zu den Implementierungen und dem, was sicher ist. Verwenden Sie die EZB NIEMALS. Dies ist schlecht, wenn Sie sich wiederholende Daten verbergen, wie der berühmte Linux-Pinguin zeigt .
Beachten Sie bei der Implementierung in Java, dass der EZB-Modus standardmäßig festgelegt ist, wenn Sie den folgenden Code verwenden:
... GEFAHR DAS IST EINE VULNERABILITÄT! und leider ist dies überall in StackOverflow und online in Tutorials und Beispielen zu sehen.
Nonces und IVs
Als Reaktion auf das Problem im EZB-Modus wurden Substantive, auch IVs genannt, erstellt. Die Idee ist, dass wir eine neue Zufallsvariable generieren und sie an jede Verschlüsselung anhängen, damit beim Verschlüsseln von zwei gleichen Nachrichten unterschiedliche Nachrichten ausgegeben werden. Das Schöne daran ist, dass eine IV oder Nonce öffentlich bekannt ist. Das bedeutet, dass ein Angreifer Zugriff darauf haben kann, aber solange er nicht über Ihren Schlüssel verfügt, kann er mit diesem Wissen nichts anfangen.
Häufige Probleme, die ich sehen werde, sind, dass Benutzer die IV als statischen Wert festlegen, wie in demselben festen Wert in ihrem Code. und hier ist die Gefahr für IVs, sobald Sie eine wiederholen, gefährden Sie tatsächlich die gesamte Sicherheit Ihrer Verschlüsselung.
Zufällige IV generieren
Hinweis: SHA1 ist defekt, aber ich konnte nicht finden, wie SHA256 in diesem Anwendungsfall richtig implementiert werden kann. Wenn also jemand eine Pause einlegen und es aktualisieren möchte, wäre es fantastisch! Auch SHA1-Angriffe sind immer noch unkonventionell, da es einige Jahre dauern kann, bis ein riesiger Cluster geknackt ist. Details finden Sie hier.
CTR-Implementierung
Für den CTR-Modus ist keine Auffüllung erforderlich.
CBC-Implementierung
Wenn Sie den CBC-Modus implementieren möchten, gehen Sie wie folgt mit PKCS7Padding vor:
CBC- und CTR-Sicherheitsanfälligkeit und warum Sie GCM verwenden sollten
Obwohl einige andere Modi wie CBC und CTR sicher sind, tritt das Problem auf, dass ein Angreifer die verschlüsselten Daten umdrehen und ihren Wert beim Entschlüsseln ändern kann. Nehmen wir also an, Sie verschlüsseln eine imaginäre Banknachricht "Sell 100". Ihre verschlüsselte Nachricht sieht wie folgt aus: "eu23ng". Der Angreifer ändert ein Bit in "eu53ng". Wenn Ihre Nachricht entschlüsselt wird, lautet sie plötzlich "Sell 900".
Um dies zu vermeiden, verwendet der Großteil des Internets GCM, und jedes Mal, wenn Sie HTTPS sehen, verwenden sie wahrscheinlich GCM. GCM signiert die verschlüsselte Nachricht mit einem Hash und überprüft, ob die Nachricht mit dieser Signatur nicht geändert wurde.
Ich würde die Implementierung von GCM aufgrund seiner Komplexität vermeiden. Sie sind besser dran, wenn Sie Googles neue Bibliothek Tink verwenden, denn auch hier gefährden Sie, wenn Sie versehentlich eine IV wiederholen, den Schlüssel im Fall von GCM, was die ultimative Sicherheitslücke darstellt. Neue Forscher arbeiten an IV-Wiederholungs-resistenten Verschlüsselungsmodi, bei denen der Schlüssel selbst dann nicht gefährdet ist, wenn Sie die IV wiederholen, aber dies ist noch kein Mainstream.
Wenn Sie nun GCM implementieren möchten, finden Sie hier einen Link zu einer netten GCM-Implementierung . Ich kann jedoch die Sicherheit nicht gewährleisten oder wenn sie ordnungsgemäß implementiert ist, aber die Basis ist schlecht. Beachten Sie auch, dass bei GCM keine Polsterung vorhanden ist.
Schlüssel gegen Passwörter
Ein weiterer sehr wichtiger Hinweis ist, dass bei der Kryptografie ein Schlüssel und ein Passwort nicht dasselbe sind. Ein Schlüssel in der Kryptographie muss ein gewisses Maß an Entropie und Zufälligkeit aufweisen, um als sicher zu gelten. Aus diesem Grund müssen Sie sicherstellen, dass Sie die richtigen kryptografischen Bibliotheken verwenden, um den Schlüssel für Sie zu generieren.
Sie haben also wirklich zwei Implementierungen, die Sie hier ausführen können. Die erste besteht darin, den Code in diesem StackOverflow-Thread für die Zufallsschlüsselgenerierung zu verwenden . Diese Lösung verwendet einen sicheren Zufallszahlengenerator, um einen Schlüssel von Grund auf neu zu erstellen, den Sie verwenden können.
Die andere weniger sichere Option ist die Verwendung von Benutzereingaben wie einem Kennwort. Das Problem, das wir besprochen haben, ist, dass das Passwort nicht genug Entropie hat, daher müssten wir PBKDF2 verwenden , einen Algorithmus, der das Passwort nimmt und es verstärkt. Hier ist eine StackOverflow-Implementierung, die mir gefallen hat . In der Google Tink-Bibliothek ist all dies integriert, und Sie sollten es nutzen.
Android-Entwickler
Ein wichtiger Punkt, auf den Sie hier hinweisen sollten, ist zu wissen, dass Ihr Android-Code rückentwickelbar ist und in den meisten Fällen auch der meiste Java-Code. Das heißt, wenn Sie das Passwort im Klartext in Ihrem Code speichern. Ein Hacker kann es leicht abrufen. Normalerweise möchten Sie für diese Art der Verschlüsselung die asymmetrische Kryptographie usw. verwenden. Dies liegt außerhalb des Rahmens dieses Beitrags, daher werde ich vermeiden, darauf einzugehen.
Eine interessante Lektüre aus dem Jahr 2013 : Weist darauf hin, dass 88% der Crypto-Implementierungen in Android nicht ordnungsgemäß durchgeführt wurden.
Abschließende Gedanken
Noch einmal, ich würde vorschlagen, die Java-Bibliothek für Krypto nicht direkt zu implementieren und Google Tink zu verwenden. Dies erspart Ihnen Kopfschmerzen, da sie wirklich gute Arbeit geleistet haben, um alle Algorithmen richtig zu implementieren. Und selbst dann sollten Sie sich über Probleme informieren, die auf dem Tink-Github aufgetreten sind. Hier und da tauchen Schwachstellen auf.
Wenn Sie Fragen oder Feedback haben, können Sie diese gerne kommentieren! Die Sicherheit ändert sich ständig und Sie müssen Ihr Bestes geben, um Schritt zu halten :)
quelle
getInstanceStrong()
Methode vonCipher
SHA1PRNGIch würde empfehlen, eine standardmäßige symmetrische Chiffre wie DES , 3DES oder AES zu verwenden . Dies ist zwar nicht der sicherste Algorithmus, es gibt jedoch zahlreiche Implementierungen, und Sie müssen den Schlüssel nur jedem geben, der die Informationen im Barcode entschlüsseln soll. Mit javax.crypto.Cipher möchten Sie hier arbeiten.
Nehmen wir an, die zu verschlüsselnden Bytes befinden sich in
Als Nächstes werden Sie die Schlüssel und benötigen Initialisierungsvektor Bytes
Jetzt können Sie die Verschlüsselung für den von Ihnen ausgewählten Algorithmus initialisieren:
Die Verschlüsselung würde so aussehen:
Und Entschlüsselung wie folgt:
quelle
DESede
Algorithmus zu verweisen ? Da dies eine beliebte Frage (und Antwort) ist, wäre es eine Schande, die Menschen zur Verwendung von DES zu ermutigen, da die Chiffre nach heutigen Maßstäben so schwach ist.Ich verwende Suns Base64Encoder / Decoder, der in Suns JRE zu finden ist, um ein weiteres JAR in lib zu vermeiden. Das ist gefährlich, wenn man OpenJDK oder die JRE eines anderen verwendet. Gibt es außerdem einen weiteren Grund, warum ich die Verwendung von Apache Commons Lib mit Encoder / Decoder in Betracht ziehen sollte?
quelle
danke, dass ich diese Klasse mit Ihrem Code erstellt habe, vielleicht findet es jemand benutzerfreundlich
Objekt Crypter
quelle
Update am 12-DEZ-2019
Im Gegensatz zu einigen anderen Modi wie CBC muss der IV im GCM-Modus nicht unvorhersehbar sein. Die einzige Voraussetzung ist, dass die IV für jeden Aufruf mit einem bestimmten Schlüssel eindeutig ist. Wenn es für einen bestimmten Schlüssel einmal wiederholt wird, kann die Sicherheit beeinträchtigt werden. Ein einfacher Weg, dies zu erreichen, besteht darin, eine zufällige IV von einem starken Pseudozufallszahlengenerator zu verwenden, wie unten gezeigt.
Die Verwendung einer Sequenz oder eines Zeitstempels als IV ist ebenfalls möglich, jedoch möglicherweise nicht so trivial, wie es sich anhört. Wenn das System beispielsweise die Sequenzen, die bereits als IV in einem persistenten Speicher verwendet wurden, nicht korrekt verfolgt, kann ein Aufruf eine IV nach einem Systemneustart wiederholen. Ebenso gibt es keine perfekte Uhr. Computeruhr stellt sich neu ein usw.
Außerdem sollte der Schlüssel nach jeweils 2 ^ 32 Aufrufen gedreht werden. Weitere Einzelheiten zur IV-Anforderung finden Sie in dieser Antwort und in den NIST-Empfehlungen .
Dies ist der Verschlüsselungs- und Entschlüsselungscode, den ich gerade in Java 8 geschrieben habe, unter Berücksichtigung der folgenden Punkte. Hoffe, jemand würde dies nützlich finden:
Verschlüsselungsalgorithmus : Blockverschlüsselung AES mit 256-Bit-Schlüssel wird als sicher genug angesehen. Um eine vollständige Nachricht zu verschlüsseln, muss ein Modus ausgewählt werden. Eine authentifizierte Verschlüsselung (die sowohl Vertraulichkeit als auch Integrität bietet) wird empfohlen. GCM, CCM und EAX sind die am häufigsten verwendeten authentifizierten Verschlüsselungsmodi. GCM wird normalerweise bevorzugt und funktioniert gut in Intel-Architekturen, die spezielle Anweisungen für GCM bereitstellen. Alle diese drei Modi sind CTR-basierte (zählerbasierte) Modi und müssen daher nicht aufgefüllt werden. Infolgedessen sind sie nicht anfällig für Polsterangriffe
Für das GCM ist ein Initialisierungsvektor (IV) erforderlich. Die IV ist kein Geheimnis. Die einzige Voraussetzung ist, dass es zufällig oder unvorhersehbar ist. In Java soll die
SecuredRandom
Klasse kryptografisch starke Pseudozufallszahlen erzeugen. Der Algorithmus zur Erzeugung von Pseudozufallszahlen kann in dergetInstance()
Methode angegeben werden. Seit Java 8 wird jedoch empfohlen, einegetInstanceStrong()
Methode zu verwenden , die den stärksten Algorithmus verwendet, der von der konfiguriert und bereitgestellt wirdProvider
NIST empfiehlt 96-Bit-IV für GCM, um Interoperabilität, Effizienz und Einfachheit des Designs zu fördern
Um zusätzliche Sicherheit zu gewährleisten, wird in der folgenden Implementierung
SecureRandom
nach dem Erzeugen alle 2 ^ 16 Bytes der Pseudozufallsbytegenerierung erneut geimpftDer Empfänger muss die IV kennen, um den Chiffretext entschlüsseln zu können. Daher muss die IV zusammen mit dem Chiffretext übertragen werden. Einige Implementierungen senden die IV als AD (Associated Data), was bedeutet, dass das Authentifizierungs-Tag sowohl für den Chiffretext als auch für die IV berechnet wird. Dies ist jedoch nicht erforderlich. Der IV kann einfach der Chiffretext vorangestellt werden, da die Validierung des Authentifizierungs-Tags ohnehin fehlschlägt, wenn die IV während der Übertragung aufgrund eines absichtlichen Angriffs oder eines Netzwerk- / Dateisystemfehlers geändert wird
Strings sollten nicht verwendet werden, um die Klartextnachricht oder den Schlüssel zu speichern, da Strings unveränderlich sind und wir sie daher nach der Verwendung nicht löschen können. Diese ungeklärten Strings bleiben dann im Speicher und können in einem Heap-Dump angezeigt werden. Aus dem gleichen Grund sollte der Client, der diese Verschlüsselungs- oder Entschlüsselungsmethoden aufruft, alle Variablen oder Arrays löschen, die die Nachricht oder den Schlüssel enthalten, nachdem sie nicht mehr benötigt werden.
Kein Anbieter ist im Code gemäß den allgemeinen Empfehlungen fest codiert
Schließlich sollte für die Übertragung über ein Netzwerk oder einen Speicher der Schlüssel oder der Chiffretext unter Verwendung der Base64-Codierung codiert werden. Die Details zu Base64 finden Sie hier . Der Java 8-Ansatz sollte befolgt werden
Byte-Arrays können gelöscht werden mit:
Ab Java 8 gibt es jedoch keine einfache Möglichkeit zum Löschen,
SecretKeyspec
undSecretKey
da die Implementierungen dieser beiden Schnittstellen die Methodedestroy()
der Schnittstelle nicht implementiert zu haben scheinenDestroyable
. Im folgenden Code wird eine separate Methode geschrieben, um die Reflexion zu löschenSecretKeySpec
und zuSecretKey
verwenden.Der Schlüssel sollte mit einem der beiden unten genannten Ansätze generiert werden.
Beachten Sie, dass Schlüssel Geheimnisse wie Passwörter sind, aber im Gegensatz zu Passwörtern, die für den menschlichen Gebrauch bestimmt sind, sollen Schlüssel von kryptografischen Algorithmen verwendet werden und sollten daher nur auf die oben beschriebene Weise generiert werden.
Der Verschlüsselungsschlüssel kann hauptsächlich auf zwei Arten generiert werden:
Ohne Passwort
Mit Passwort
Update basierend auf Kommentaren
Wie von @MaartenBodewes hervorgehoben, hat meine Antwort keine
String
der in der Frage geforderten beantwortet. Daher werde ich versuchen, diese Lücke zu schließen, falls jemand auf diese Antwort stößt und sich über die Handhabung wundertString
.Wie bereits in der Antwort erwähnt, ist der Umgang mit vertraulichen Informationen in a
String
im Allgemeinen keine gute Idee, da sieString
unveränderlich sind und daher nach der Verwendung nicht gelöscht werden können. Und wie wir wissen, beeilt sichString
der Garbage Collector nicht sofort, um einen vom Haufen zu entfernen , selbst wenn a keine starke Referenz hat. SomitString
bleibt das für ein unbekanntes Zeitfenster im Speicher, obwohl es für das Programm nicht zugänglich ist. Das Problem dabei ist, dass ein Heap-Dump während dieses Zeitraums die vertraulichen Informationen enthüllt. Daher ist es immer besser, alle vertraulichen Informationen in einem Byte-Array oder Char-Array zu verarbeiten und das Array dann mit Nullen zu füllen, sobald ihr Zweck erfüllt ist.Wenn wir jedoch mit all diesem Wissen immer noch in einer Situation enden, in der sich die zu verschlüsselnden vertraulichen Informationen in a befinden
String
, müssen wir sie zuerst in ein Byte-Array konvertierenencrypt
unddecrypt
die oben eingeführten Funktionen und aufrufen . (Der andere Eingabeschlüssel kann mit dem oben angegebenen Codeausschnitt generiert werden.)A
String
kann folgendermaßen in Bytes konvertiert werden:Ab Java 8
String
wird intern im Heap mitUTF-16
Codierung gespeichert . Wir habenUTF-8
hier jedoch verwendet , da es normalerweise weniger Platz benötigt alsUTF-16
insbesondere für ASCII-Zeichen.Ebenso kann das verschlüsselte Byte-Array wie folgt in einen String konvertiert werden:
quelle
String
mit den oben erstellten Funktionen trivial wäre. Bei einem zweiten Blick nach dem Lesen Ihres Kommentars verstehe ich jedoch, dass dies möglicherweise nicht offensichtlich ist. Ich werde sicherlich bearbeiten, um diese Details hinzuzufügen.Wie wäre es damit:
Funktioniert gut für mich und ist ziemlich kompakt.
quelle
input.length <= secret.length
Holds und Nosecret
jemals wiederverwendet werden, ist dies sicher und wird als a bezeichnetone-time-pad
. In diesen Fälleninput.length > secret.length
handelt es sich um eine Variante der Vigenère-Chiffre, die als sehr schwach angesehen wird.Sie können Jasypt verwenden
Mit Jasypt kann das Verschlüsseln und Überprüfen eines Passworts so einfach sein wie ...
Verschlüsselung:
Entschlüsselung:
Gradle:
Eigenschaften:
quelle
Jasypt
? Ich kann es nicht von ihrer Website herausfinden. Ist es bei ausgewählten Klartextangriffen nicht zu unterscheiden? Integrität? Vertraulichkeit?Hier ist meine Implementierung von meta64.com als Spring Singleton. Wenn Sie für jeden Aufruf eine Ciper-Instanz erstellen möchten, die auch funktioniert, können Sie die synchronisierten Aufrufe entfernen. Beachten Sie jedoch, dass die Verschlüsselung nicht threadsicher ist.
quelle
Hier eine einfache Lösung mit nur
java.*
undjavax.crypto.*
Abhängigkeiten für die Verschlüsselung von Bytes, die Vertraulichkeit und Integrität bieten . Es ist bei einem ausgewählten Klartextangriff für Kurznachrichten in der Größenordnung von Kilobyte nicht zu unterscheiden.Es wird
AES
imGCM
Modus ohne Auffüllen verwendet, ein 128-Bit-Schlüssel wirdPBKDF2
mit vielen Iterationen und einem statischen Salt aus dem angegebenen Passwort abgeleitet. Dies stellt sicher, dass das brutale Erzwingen von Passwörtern schwierig ist, und verteilt die Entropie auf den gesamten Schlüssel.Ein zufälliger Initialisierungsvektor (IV) wird erzeugt und dem Chiffretext vorangestellt. Darüber hinaus wird dem statischen Byte
0x01
das erste Byte als 'Version' vorangestellt.Die gesamte Nachricht wird in den Nachrichtenauthentifizierungscode (MAC) eingegeben, der von generiert wird
AES/GCM
.Hier geht es los, keine Verschlüsselungsklasse für externe Abhängigkeiten, die Vertraulichkeit und Integrität bietet :
Hier das gesamte Projekt mit einer schönen CLI: https://github.com/trichner/tcrypt
Edit: jetzt mit entsprechenden
encryptString
unddecryptString
quelle
encryptString
unddecryptString
:) hinzugefügtIch würde in Betracht ziehen, etwas wie https://www.bouncycastle.org/ zu verwenden. Es ist eine vorgefertigte Bibliothek, mit der Sie alles, was Sie möchten, mit einer Reihe verschiedener Chiffren verschlüsseln können. Ich verstehe, dass Sie nur vor Schnüffeln schützen möchten, aber wenn Sie es wirklich tun Wenn Sie die Informationen schützen möchten, werden Sie mit Base64 nicht wirklich geschützt.
quelle
Hier sind einige Links, die Sie lesen können, was Java unterstützt
Verschlüsseln / Entschlüsseln eines Datenstroms.
JCERefGuide
Beispiele für Java-Verschlüsselung
quelle
Wie viele der Jungs bereits gesagt haben, sollten Sie eine Standard-Chiffre verwenden, die häufig wie DES oder AES verwendet wird.
Ein einfaches Beispiel dafür, wie Sie eine Zeichenfolge in Java mit AES verschlüsseln und entschlüsseln können .
quelle
Hier ist eine Lösung zum Kopieren / Einfügen. Ich empfehle auch, die Antwort von @ Konstantino zu lesen und dafür zu stimmen , obwohl sie keinen Code enthält. Der Initialisierungsvektor (IV) ist wie ein Salz - er muss nicht geheim gehalten werden. Ich bin neu in GCM und anscheinend ist AAD optional und wird nur unter bestimmten Umständen verwendet. Legen Sie den Schlüssel in der Umgebungsvariablen fest
SECRET_KEY_BASE
. Verwenden Sie so etwas wie KeePass , um ein 32-stelliges Passwort zu generieren. Diese Lösung ist meiner Ruby-Lösung nachempfunden.Hier ist ein Beispiel:
quelle
Möglicherweise möchten Sie ein automatisiertes Tool für die Generierung des Verschlüsselungs- / Entschlüsselungscodes in Betracht ziehen, z. https://www.stringencrypt.com/java-encryption/
Es kann jedes Mal einen anderen Ver- und Entschlüsselungscode für die Zeichenfolgen- oder Dateiverschlüsselung generieren.
Es ist ziemlich praktisch, wenn es um die schnelle Verschlüsselung von Zeichenfolgen ohne Verwendung von RSA, AES usw. geht.
Beispielergebnisse:
Wir verwenden es ständig in unserem Unternehmen.
quelle
quelle
quelle