Я пытаюсь создать тег аутентификации в C#, который я уже сгенерировал в Ruby (для целей тестирования). Однако результаты разные, но, насколько я вижу, входы равны.тег аутентификации AES/GCM (AES-128-GCM) отличается в C# и Ruby
В Ruby 2.0 с помощью OpenSSL 1.0.1c (Ubuntu 13.04):
require 'openssl'
require 'base64'
iv = Base64.decode64('kEWio77T7qWdytrIbUmRxA==')
key = Base64.decode64('FnUoIZvBUzC1Q/rn5WMi7Q==')
aad = Base64.decode64('/tTP07sPkoX8gah60eH89w==')
cipher = OpenSSL::Cipher.new('aes-128-gcm').encrypt
cipher.iv = iv
cipher.key = key
cipher.auth_data = aad
cipher.final
tag = Base64.strict_encode64(cipher.auth_tag)
Полученный (кодируются) тег ie74XTWtSLNad0BKdrhvmQ==
В C# с помощью BouncyCastle (фрагмент):
var iv = Convert.FromBase64String("kEWio77T7qWdytrIbUmRxA==");
var key = Convert.FromBase64String("FnUoIZvBUzC1Q/rn5WMi7Q==");
var aad = Convert.FromBase64String("/tTP07sPkoX8gah60eH89w==");
var cipher = new GcmBlockCipher(new AesFastEngine());
var parameters = new AeadParameters(new KeyParameter(passkey), 128, iv, aad);
cipher.Init(true, parameters);
var cipherText = new byte[cipher.GetOutputSize(0)];
cipher.DoFinal(cipherText, 0);
var tag = Convert.ToBase64String(cipher.GetMac());
Полученная метка в C# равна sawCcwM1T8sGl5y6VT0CHA==
Wh я здесь делаю неправильно? Заранее благодарю за ваш ответ!
Что такое «ключ доступа»? Это опечатка, или это неверный ключ? –
Nevermind, это опечатка, см. Ответ ниже. –