Почему ruby-mcrypt не принимает массив в качестве ключа? - PullRequest
0 голосов
/ 02 января 2019

Здравствуйте! У меня проблемы с шифрованием с использованием массива в качестве ключа и значения с ruby-mcrypt gem .Драгоценный камень позволяет мне использовать массив для ключа отлично, cipher = Mcrypt.new("rijndael-256", :ecb, secret) работает.Но это даст мне ошибку, когда я попытаюсь зашифровать.Я перепробовал много вещей, но не повезло.Кто-нибудь знает, если Mcrypt просто не любит шифрование с помощью массива?

require 'mcrypt'

def encrypt(plain, secret)
  cipher = Mcrypt.new("rijndael-256", :ecb, secret)
  cipher.padding = :zeros

  encrypted = cipher.encrypt(plain)
  p encrypted
  encrypted.unpack("H*").first.to_s.upcase
end

array_to_encrypt = [16, 0, 0, 0, 50, 48, 49, 55, 47, 48, 50, 47, 48, 55, 32, 50, 50, 58, 52, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
key_array = [65, 66, 67, 68, 49, 50, 51, 52, 70, 71, 72, 73, 53, 54, 55, 56]

result = encrypt(array_to_encrypt, key_array)
p "RESULT IS #{result}"

Вывод выглядит следующим образом:

Mcrypt::RuntimeError: Could not initialize mcrypt: Key length is not legal.

Я проследил эту ошибку до здесь в самоцвете ruby-mcrypt, но не достаточно, чтобы понять, почему я получаю сообщение об ошибке.Любая помощь или идеи будут удивительными.Спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Библиотека не поддерживает массивы. Вам нужно будет использовать строки вместо:

def binary(byte_array)
  byte_array.pack('C*')
end

array_to_encrypt = [16, 0, 0, 0, 50, 48, 49, 55, 47, 48, 50, 47, 48, 55, 32, 50, 50, 58, 52, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
key_array = [65, 66, 67, 68, 49, 50, 51, 52, 70, 71, 72, 73, 53, 54, 55, 56]

result = encrypt(binary(array_to_encrypt), binary(key_array))
p "RESULT IS #{result}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...