Почему ruby-mcrypt не принимает массив в качестве ключа?

Вопрос задан: 7 месяцев назад Последняя активность: 7 месяцев назад
up 2 down

Здравствуйте, у меня возникли проблемы при шифровании с использованием массива в качестве ключа и значения с рубиновый камень. Драгоценный камень позволяет мне использовать массив для ключа штрафа, 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 ответ

up 1 down accepted

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

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}"