大于 64 位的 C++ 数据类型
C++ data type greater than 64 bits
我正在尝试编写一个 RSA 实现并且需要处理 100 位和更大的数字。是否有任何 C++ 数据类型可以允许这样做?
如果您一直在使用 GCC,并且您的计算机支持 64 位架构,则可以在 C++ 中使用 __int128_t
数据类型来保存 16 字节的数据(即 128 位整数)。正如 所提到的,如果您在使用 __int128_t
.
时遇到任何问题,您可以使用 boost 多精度库(随 /multiprecision/cpp_int.hpp
一起提供)
如果“C++ 数据类型”是指“标准保证的原始整数类型”,则不是。
如果“C++ 数据类型”是指“我的平台上实际存在的原始整数类型”,那么可能,但您必须告诉我们您的平台是什么是,而你还没有。
如果“C++ 数据类型”是指“C++ 中可用的任何类型”,那么答案很简单当然,因为任何平台都能够适应std::array<uint32_t, 4>
。不过,您必须编写一些代码才能像使用常规整数类型一样使用它。
更通用的解决方案是使用大整数、任意精度或多精度库。例如 Boost.multiprecision,但现在您可以找到很多其他的,因为您知道正确的搜索词。
备注
Maarten Bodewes 就安全性提出了一个很好的观点,我只是回答 C++ 部分而完全忽略了这一点。您没有说您的 RSA 实现有任何安全要求,但以防万一...
如果您确实关心它在某些实际应用中的实际使用安全性,请考虑
- 100 位可能太弱了,
- 除了算法的正确性(例如 side-channel 攻击和恶意输入攻击),您可能还有更多的安全顾虑。
这些都超出了这个(或任何其他个人)问题的范围,但它们值得一些思考和研究。使用专门用于加密用途的多精度库是实现这一目标的最小第一步。
我正在尝试编写一个 RSA 实现并且需要处理 100 位和更大的数字。是否有任何 C++ 数据类型可以允许这样做?
如果您一直在使用 GCC,并且您的计算机支持 64 位架构,则可以在 C++ 中使用 __int128_t
数据类型来保存 16 字节的数据(即 128 位整数)。正如 __int128_t
.
/multiprecision/cpp_int.hpp
一起提供)
如果“C++ 数据类型”是指“标准保证的原始整数类型”,则不是。
如果“C++ 数据类型”是指“我的平台上实际存在的原始整数类型”,那么可能,但您必须告诉我们您的平台是什么是,而你还没有。
如果“C++ 数据类型”是指“C++ 中可用的任何类型”,那么答案很简单当然,因为任何平台都能够适应std::array<uint32_t, 4>
。不过,您必须编写一些代码才能像使用常规整数类型一样使用它。
更通用的解决方案是使用大整数、任意精度或多精度库。例如 Boost.multiprecision,但现在您可以找到很多其他的,因为您知道正确的搜索词。
备注
Maarten Bodewes 就安全性提出了一个很好的观点,我只是回答 C++ 部分而完全忽略了这一点。您没有说您的 RSA 实现有任何安全要求,但以防万一...
如果您确实关心它在某些实际应用中的实际使用安全性,请考虑
- 100 位可能太弱了,
- 除了算法的正确性(例如 side-channel 攻击和恶意输入攻击),您可能还有更多的安全顾虑。
这些都超出了这个(或任何其他个人)问题的范围,但它们值得一些思考和研究。使用专门用于加密用途的多精度库是实现这一目标的最小第一步。