以下のように暗号化された数値です。暗号化された数値の長さが異なるのはなぜですか?
> 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
上記の結果が期待されます。 4611686018427387903より小さい数のクラスがFixnumであり、Fixnumのサイズが8バイトであるためです。 さらに、AESのブロックサイズは128ビット(16バイト)です。 8バイト< 16バイト。 したがって、暗号化された値1と10000の長さは同じです。
ただし、以下の場合、暗号化された値の長さが異なります。
> message3 = 1000000000000000000000000000
> message3.size
=> 12
> message3.class
=> Bignum
> encrypt_message3 = encryptor.encrypt_and_sign(message3)
> encrypt_message3.size
=> 138
1000000000000000000000000000 BIGNUMであるが、このサイズは12であり、16未満(AESのブロックサイズ)。 したがって、暗号化された値の長さがFixnumの長さと同じであると予想しました。 しかし、これらは異なっています...
これらはどうして違うのですか?
暗号化されたメッセージのクラス名を印刷してみてください。 –
クラスを印刷しようとしました。 > encrypt_message1.class =>文字列 > encrypt_message3.class =>文字列 – tamagohan2
次に、あなたの答えがあります:) - すなわち数の大きさは、単に彼は数が格納されたレジスタのサイズが、サイズであります文字列は文字列内の文字数です。 –