我正在研究我的橢圓曲線密碼學項目,該項目需要對二進制字段進行編程。它包括基本的操作,如加法,乘法,反轉等w.r.t.一個不可約二元多項式。如何在編程語言中表示二進制字段?
我正在尋找一種方法,可以將這些二進制多項式存儲在程序中。我正在研究C和C++編程語言(使用gmp庫),所以我首先想到的是使用結構和位域。但它們不是動態的,不能保持任意長的多項式。使用C++ Vector STL是可能的,但它效率不高,因爲它將單個位存儲在$ 8 $或更多位的單個字中。
是否有任何有效的表示方式?
我正在研究我的橢圓曲線密碼學項目,該項目需要對二進制字段進行編程。它包括基本的操作,如加法,乘法,反轉等w.r.t.一個不可約二元多項式。如何在編程語言中表示二進制字段?
我正在尋找一種方法,可以將這些二進制多項式存儲在程序中。我正在研究C和C++編程語言(使用gmp庫),所以我首先想到的是使用結構和位域。但它們不是動態的,不能保持任意長的多項式。使用C++ Vector STL是可能的,但它效率不高,因爲它將單個位存儲在$ 8 $或更多位的單個字中。
是否有任何有效的表示方式?
我會使用std::vector<unsigned char>
或std::array<unsigned char, SIZE>
。密碼原語通常具有固定長度,因此可以使用std::array
輕鬆存儲。但是,如果您需要不同長度的值,我會推薦std::vector
。使用unsigned char
而不是char
簡化了計算。
使用std::vector<bool>
不使用每個數據位一個字節,因爲它專用於在單個字節中存儲8位。然而,據說,單獨讀取和寫入每個比特將會非常緩慢,所以我不會爲您的目的而推薦它。
聽起來好像你的問題更多的是尋找合適的數據結構來支持包含高達幾百位的位字段的操作。在我看來,這使得關於MSE的問題變得無關緊要。但是在結束之前我會等待其他意見。也因爲我分享你的痛苦。這是我25年前不習慣C語言的原因之一。如果你不能定義長度超過16(或32或其他)的長度,有什麼意義?-) –
毫無疑問,你知道這一點,但在某些情況下,使用大型有限特徵二的領域。然後,平方是一個循環移位,如果你幸運的話,乘法運算速度很快,因爲定義基本元素乘積的數組非常稀疏。 –
其他意見來了。啓動遷移。 –