Я использую BouncyCastle для шифрования данных на C # с использованием алгоритма AES256 GCM. Для этого я использую реализацию , предоставленную Джеймсом Тьюли. Ниже приведен фрагмент этого кода:
public byte[] SimpleEncrypt(byte[] secretMessage, byte[] key, byte[] nonSecretPayload = null)
{
if (key == null || key.Length != KeyBitSize / 8)
throw new ArgumentException($"Key needs to be {KeyBitSize} bit!", nameof(key));
if (secretMessage == null || secretMessage.Length == 0)
throw new ArgumentException("Secret Message Required!", nameof(secretMessage));
nonSecretPayload = nonSecretPayload ?? new byte[] { };
byte[] nonce = _csprng.RandomBytes(NonceBitSize / 8);
var cipher = new GcmBlockCipher(new AesFastEngine());
var parameters = new AeadParameters(new KeyParameter(key), MacBitSize, nonce, nonSecretPayload);
cipher.Init(true, parameters);
var cipherText = new byte[cipher.GetOutputSize(secretMessage.Length)];
int len = cipher.ProcessBytes(secretMessage, 0, secretMessage.Length, cipherText, 0);
cipher.DoFinal(cipherText, len);
using (var combinedStream = new MemoryStream())
{
using (var binaryWriter = new BinaryWriter(combinedStream))
{
binaryWriter.Write(nonSecretPayload);
binaryWriter.Write(nonce);
binaryWriter.Write(cipherText);
}
return combinedStream.ToArray();
}
}
Мне нужно получить тег аутентификации (упомянутый в RFC 5084). В нем упоминается, что тег аутентификации является частью вывода:
AES-GCM генерирует два вывода: зашифрованный текст и код аутентификации сообщения (также называемый тегом аутентификации).
Я не понимаю, как получить тег аутентификации из этого кода? Может кто-нибудь мне помочь?
nonSecretPayload
является параметром прохода, аcipherText
- одним из выходов в соответствии со стандартами, остаетсяnonce
. Может быть, в стандарте они ссылаются наnonce
как на тег аутентификации? - person Cee McSharpface   schedule 01.05.2016