Почему метод .NET RandomNumberGenerator.GetBytes присваивает свои результаты параметру байтового массива, а не возвращает новый байтовый массив? - PullRequest
2 голосов
/ 08 октября 2019

.NET Framework имеет класс RandomNumberGenerator для генерации криптографически безопасных случайных байтов. Один из его основных методов, GetBytes, имеет сигнатуру void GetBytes (byte[] data) - он принимает массив байтов в качестве параметра и заполняет его случайными байтами, а не возвращает массив байтов. Почему это? Существуют ли причины безопасности для работы с существующим массивом вместо создания нового?

1 Ответ

1 голос
/ 08 октября 2019

Я не думаю, что безопасность могла бы быть причиной для параметра byte[] в управляемой среде. Я не вижу никакой разницы в том, что он генерируется методом и вне его, так как byte[] - массив базового типа - вряд ли будет иметь несколько реализаций. Если бы была возможная разница, то было бы более разумно, чтобы метод генерировал байтовый массив.

Без него уже указанная причина эффективности имеет больше смысла;В конце концов, байтовый массив может быть большим (-ish), и вы не можете дублировать эффективность вызова, который принимает байты. Существует также другой метод , который дополнительно принимает смещение и «счет» байтов для существующего массива. Это позволяет вам напрямую генерировать байты в массиве, который также может содержать другие данные (например, объединение IV и зашифрованного текста в байтовом массиве). Конечно, единственный параметр - это просто особый случай / удобный метод для этого вызова. Многопараметрический является наиболее важным для эффективности, так как в противном случае вам также пришлось бы дублировать шифротекст;Массивы не могут быть сокращены в конце концов. Было бы странно создавать метод с тем же именем, но с совершенно другой сигнатурой метода.

Другие структуры, такие как Java JCA, имеют те же методы для SecureRandom. Таким образом, вполне вероятно, что авторы знали о таких платформах и решили имитировать эти существующие API, если не было достаточных оснований для изменений.

...