[PYTHON] Verschlüsseln Sie reversibel eine Ganzzahl mit einer beliebigen Anzahl von Ziffern

Was willst du tun

Ich wollte einen numerischen Wert mit einer beliebigen Anzahl von Ziffern reversibel konvertieren, und als ich auf verschiedene Weise suchte, fand ich die folgenden Artikel großer Vorfahren. Reversibles Verwürfeln von ganzen Zahlen - C schärft Sie Reversibles Verwürfeln von Ganzzahlen in Python

Geändert, damit die Anzahl der Ziffern als Argument empfangen werden kann. Es scheint, dass der Bitumkehrteil nur dann gut realisiert werden kann, wenn es sich um einen Multiplikator von 2 handelt. (Vielleicht habe ich nicht genug herausgefunden) Der hintere Teil war etwas ausgeschnitten.

scramble.py


# -*- coding: utf-8 -*-
"""
Ziffernfreie reversible Ganzzahlerstellung
"""

class Scramble:
    def __init__(self, bit_digit):
        self.__bit_digit = bit_digit
        self.__mask = (1 << bit_digit) - 1

    def scramble(self, number, salt, inverse_salt):
        return self.__trim(self.__reverse(self.__trim(number * salt)) * inverse_salt)

    def __reverse(self, number):
        bit = '0' * self.__bit_digit + bin(number)[2:]
        bit = bit[-self.__bit_digit:]
        bit = ''.join(reversed(list(bit)))
        return long(bit, 2)

    def __trim(self, number):
        return number & self.__mask

def scramble(number, bit_digit, salt, inverse_salt):
    return Scramble(bit_digit).scramble(number, salt, inverse_salt)

Wenn Sie es tatsächlich benutzen

from scramble import scramble

print scramble(1, 48, 0x717b9f2dded3, 0xb784b8b6295b)
>> 186674888497786L

print scramble(186674888497786L, 48, 0x717b9f2dded3, 0xb784b8b6295b
>> 1

Auf diese Weise wurde es reversibel konvertiert.

wichtiger Punkt

Wenn die Zahl 48 Bit ist, sollten Salt und inverse_salt ebenfalls 48 Bit sein.

Recommended Posts

Verschlüsseln Sie reversibel eine Ganzzahl mit einer beliebigen Anzahl von Ziffern
Holen Sie sich die Anzahl der Ziffern
Reversibles Verwürfeln von Ganzzahlen in Python
Geben Sie csv mit unterschiedlicher Anzahl von Ziffern für jede Spalte mit numpy aus
Erweitern Sie eine beliebige Anzahl von Argumenten mit yasnippet
So ermitteln Sie die Anzahl der Stellen in Python