2015-12-14 15 views
0

我正在研究我的椭圆曲线密码学项目,该项目需要对二进制字段进行编程。它包括基本的操作,如加法,乘法,反转等w.r.t.一个不可约二元多项式。如何在编程语言中表示二进制字段?

我正在寻找一种方法,可以将这些二进制多项式存储在程序中。我正在研究C和C++编程语言(使用gmp库),所以我首先想到的是使用结构和位域。但它们不是动态的,不能保持任意长的多项式。使用C++ Vector STL是可能的,但它效率不高,因为它将单个位存储在$ 8 $或更多位的单个字中。

是否有任何有效的表示方式?

+1

听起来好像你的问题更多的是寻找合适的数据结构来支持包含高达几百位的位字段的操作。在我看来,这使得关于MSE的问题变得无关紧要。但是在结束之前我会等待其他意见。也因为我分享你的痛苦。这是我25年前不习惯C语言的原因之一。如果你不能定义长度超过16(或32或其他)的长度,有什么意义?-) –

+1

毫无疑问,你知道这一点,但在某些情况下,使用大型有限特征二的领域。然后,平方是一个循环移位,如果你幸运的话,乘法运算速度很快,因为定义基本元素乘积的数组非常稀疏。 –

+0

其他意见来了。启动迁移。 –

回答

1

我会使用std::vector<unsigned char>std::array<unsigned char, SIZE>。密码原语通常具有固定长度,因此可以使用std::array轻松存储。但是,如果您需要不同长度的值,我会推荐std::vector。使用unsigned char而不是char简化了计算。

使用std::vector<bool>不使用每个数据位一个字节,因为它专用于在单个字节中存储8位。然而,据说,单独读取和写入每个比特将会非常缓慢,所以我不会为您的目的而推荐它。

相关问题