Ich verschlüsselte numerischen Wert wie folgt.Warum ist die Länge des verschlüsselten numerischen Werts anders?
> secret = Sestrong textcureRandom::hex(128)
> encryptor = ::ActiveSupport::MessageEncryptor.new(secret, cipher: 'aes-256-cbc')
> message1 = 1
> message1.size
=> 8
> message1.class
=> Fixnum
> encrypt_message1 = encryptor.encrypt_and_sign(message1)
> encrypt_message1.length
=> 110
> message2 = 10000
> message2.size
=> 8
> message2.class
=> Fixnum
> encrypt_message2 = encryptor.encrypt_and_sign(message2)
> encrypt_message2.length
=> 110
Das obige Ergebnis ist das erwartete Ergebnis. Da die Klasse der Nummer, die weniger als 4611686018427387903 ist, Fixnum ist, und die Größe von Fixnum ist 8 Byte. Außerdem beträgt die Blockgröße von AES 128 Bit (16 Byte). 8 Byte < 16 Byte. So ist die Länge des verschlüsselten Wertes von 1 und 10000 gleich.
Aber folgenden Fall, Länge des verschlüsselten Werts ist anders.
> message3 = 1000000000000000000000000000
> message3.size
=> 12
> message3.class
=> Bignum
> encrypt_message3 = encryptor.encrypt_and_sign(message3)
> encrypt_message3.size
=> 138
1000000000000000000000000000 Bignum ist, aber diese Größe 12 und weniger als 16 (Blockgröße von AES). Also, ich habe erwartet, dass die Länge des verschlüsselten Wertes der von Fixnum ist. Aber diese sind unterschiedlich ...
Warum sind diese anders?
Versuchen Sie, den Klassennamen der verschlüsselten Nachricht zu drucken ... –
Ich habe versucht, Klasse zu drucken. > encrypt_message1.class => String > encrypt_message3.class => String – tamagohan2
Dann gibt es die Antwort :) also - die Größe einer Zahl ist lediglich die Größe des Registers, dass er Nummer gespeichert, aber die Größe von eine Zeichenkette ist, wie viele Zeichen in der Schnur sind ... –