2017-01-03 6 views
0

Gibt es eine Möglichkeit, String auf die angegebene Länge zu komprimieren/zu codieren (8/10 Zeichen).String mit einer beliebigen Länge in eine bestimmte Länge codieren

Ich habe eine Kombination aus geheimen Schlüssel und einem numerischen Wert von 16 Ziffern, und ich möchte eine eindeutige ID mit Kombination dieser beiden erstellen. Die Länge sollte zwischen 8 und 12 liegen und sollte sich nicht ändern, wenn die Kombination gleich ist.

Bitte schlagen Sie einen Weg vor.

Antwort

0

Wenn es 16 Dezimalziffern gibt und Ihre Zeichenfolge beliebige Zeichen enthalten kann, dann ist es sicher. Wenn Sie zehn Zeichen möchten, benötigen Sie 40 verschiedene Zeichen. 40 > 10 . Oder für neun Charaktere brauchen Sie 60 verschiedene Charaktere. 60 > 10 . Z.B. eine Teilmenge der Großbuchstaben, Kleinbuchstaben und Ziffern (62 bis 40 oder 60 von wählen). Dann ist es einfach eine Frage der Basenumwandlung. Konvertieren von Basis 10 zu Basis 40 oder 60 und dann zurück.

Viele Sprachen haben bereits Base-64-Codierroutinen, die Sie auf neun Zeichen bringen.

Acht ist ein Problem, da Sie 100 Zeichen benötigen würden (100 == 10), und es gibt nur 95 druckbaren ASCII-Zeichen.

+0

Eigentlich bin ich nicht so viel Experte darin, können Sie bitte einen Referenzlink teilen –

0

Sie könnten eine sichere Hash-Funktion wie sha512 verwenden und die resultierende Hex-Zeichenfolge auf die gewünschte Länge abschneiden.

Wenn Sie etwas mehr Entropie wollen, können Sie Base64 vor dem Abschneiden codieren.

+0

Wird es einzigartig sein ..? –

+0

@AnjuJPandey mit einer sehr hohen Wahrscheinlichkeit, ja. Sie erhalten keine geringere Kollisionswahrscheinlichkeit, ohne sicherzustellen, dass es keine Kollisionen gibt, z. durch sequentielle Nummerierung von IDs (was aus anderen Gründen eine schlechte Idee ist). –