Как мне упаковать 128- или 256-битные числа

#perl #pack

#perl #упаковать

Вопрос:

Возможно ли упаковать 128- или 256-битные числа (ключи AES / ivs, сгенерированные с помощью Crypt::Random::makerandom), используя встроенный пакет perl? Если да, то во что должен быть вставлен мой шаблон X

 pack('X', ($256_bit_number)); 
  

быть?

Спасибо.

Ответ №1:

Perl не может содержать такие большие числа, поэтому он не может их упаковать.

Итак, давайте посмотрим, что makerandom на самом деле возвращает.

 $ perl -MData::Dumper -MCrypt::Random=makerandom 
   -e'print(Dumper(makerandom(Size => 256, Strength => 1)));'
$VAR1 = bless( do{(my $o = 148076988)}, 'Math::Pari' );
  

Ах, объект Math::Pari. Глядя на документы, кажется, что не существует простого способа их упаковать. Но, похоже, нам этого не нужно. Crypt::Random обеспечивает makerandom_octet возврат «упакованного» числа.

 $ perl -MCrypt::Random=makerandom_octet 
   -e'print(unpack("H*", makerandom_octet(Size => 256, Strength => 1)));'
1432698ef28c63d9cb0bba474c1644b4a6f9736616bd070102a612785332e94bb4