。NET的RandomNumberGenerator.GetBytes方法为什么将其结果分配给字节数组参数而不是返回新的字节数组?

问题描述 投票:1回答:1

。NET Framework具有RandomNumberGenerator类,用于生成加密安全的随机字节。它的主要方法之一RandomNumberGenerator具有签名GetBytes-它使用字节数组作为参数,并用随机字节填充它,而不是返回字节数组。为什么是这样?在现有阵列上操作而不是创建新阵列时是否存在安全原因?

.net random cryptography api-design
1个回答
1
投票

我认为安全性并不是托管框架中GetBytes参数的真正原因。我看不到它是由方法生成的,还是在方法外部没有任何区别,因为void GetBytes (byte[] data)-基本类型的数组-不可能有多个实现。如果可能存在差异,则使该方法生成字节数组会更有意义。

没有它,已经给出的效率原因更有意义;字节数组毕竟可能是larg(-ish),并且您无法复制占用字节的调用的效率。现有数组还有另一种方法byte[]。这使您可以直接生成一个字节到一个数组,该数组还可以保存其他数据(例如,字节数组中IV和密文的串联)。当然,单个参数只是该调用的一种特殊情况/便捷方法。多参数之一是提高效率的最重要参数,否则您也必须复制密文。数组毕竟不能缩小。创建具有相同名称但方法签名非常不同的方法会很奇怪。

[Java JCA之类的其他框架对于byte[]具有相同的方法。因此,除非有足够的理由进行更改,否则作者可能了解此类框架并决定模仿这些现有的API。

© www.soinside.com 2019 - 2024. All rights reserved.