Ruby OpenSSL :: Cipher :: CipherError (ключ не установлен) - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь перенести существующий код шифрования .net на ruby. Но застрял с ошибкой key not set.

Ниже - код .net для шифрования строки.

private static string Encrypt(string strToEncrypt, string saltValue, string password)
        {

            using (var csp = new AesCryptoServiceProvider())
            {
                ICryptoTransform e = GetCryptoTransform(csp, true, saltValue, password);
                byte[] inputBuffer = Encoding.UTF8.GetBytes(strToEncrypt);
                byte[] output = e.TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);

                string encrypted = Convert.ToBase64String(output);

                return encrypted;
            }
        }

private static ICryptoTransform GetCryptoTransform(AesCryptoServiceProvider csp, bool encrypting, string saltValue, string password)
        {          

            csp.Mode = CipherMode.CBC;
            csp.Padding = PaddingMode.PKCS7;
            var passWord = password;

            var salt = saltValue;

            //a random Init. Vector. just for testing
            String iv = "e675f725e675f123";

            var spec = new Rfc2898DeriveBytes(Encoding.UTF8.GetBytes(passWord), Encoding.UTF8.GetBytes(salt), 1000);
            byte[] key = spec.GetBytes(16);


            csp.IV = Encoding.UTF8.GetBytes(iv);
            csp.Key = key;         


            if (encrypting)
            {
                return csp.CreateEncryptor();
            }
            return csp.CreateDecryptor();
        }

Я использовал библиотеку Ruby OpenSSL::PKCS5 для генерации ключа и OpenSSL::Cipher для шифрования с использованием алгоритма AES, как показано ниже.

  def aes_encrypt(input_string)
    cipher = OpenSSL::Cipher.new('AES-128-CBC')
    cipher.encrypt
    key = encryption_key
    iv  = cipher.random_iv

    cipher.update(input_string) + cipher.final
  end

  def encryption_key
    OpenSSL::PKCS5.pbkdf2_hmac_sha1(PASSWORD, SALT, 1000, 16)
  end

Может кто-нибудь сообщить, где мне не хватает? (Обивка?)

...