将RFC5114中定义的 1024 位 P 和 G 值加载到 boost uint1024 中
Load 1024bit P and G value defined in the RFC5114 into boost uint1024
我正在尝试实现一个diffie-hellman密钥交换系统。对于我的 P 和 G 值,我计划使用 RFC5114 2.1 中定义的值。所以我有以下代码:
#Code
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
using namespace std;
int main(){
uint1024_t P;
P = 0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371;
cout << "P is: " << P << endl;
cout << "Maximum value for uint1024_t is:" <<std::numeric_limits<uint1024_t>::max() << endl;
return 0;
}
#Output
P is: 16077765716036174705
Maximum value for uint1024_t is:179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137215
// that value is equal to 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
// which is larger than the value that i try to assign to P
#Warning 警告:整数常量对于其类型来说太大
所以。。。 ###What 我在这里做错了吗?我该如何解决这个问题?
您可以从字符串构造整数:
uint1024_t P = "0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371";
但是,这将在运行时构造文本。如果要在编译时构造它,可以使用 boost::multiprecision 提供的用户定义文本:
constexpr auto P = 0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371_cppui1024;
C++ 中的整数文本的类型最多是(unsigned) long long int
(如果实现支持,则为更大的类型(。在您的情况下,文本太大,因此将缩小到该类型。
请参阅boost::multiprecision
文档第 1 部分和第 2 部分。
相关文章:
- std::原子加载和存储都需要吗
- 将RFC5114中定义的 1024 位 P 和 G 值加载到 boost uint1024 中
- 2D 矢量未正确保存并加载 boost::序列化库
- Boost:在单独的加载/保存函数中非侵入性地序列化类
- 有关使用 boost::variant 重新加载运算符的编译错误
- 如何使用boost::fs只加载30个最新文件,而不是整个目录
- 使用 Boost.Python 从 DLL 动态加载 python 模块
- C++ Boost::序列化"no matching function for call"到我的加载函数参数中类的构造函数
- 使用 boost 序列化到磁盘后无法加载数据
- C++Boost.序列化与简单的加载/保存
- Boost.Graph:保存并加载一个名为Boost::adjacety_list的列表
- Boost::Python:嵌入并加载Boost::Python模块和转换器
- 无法加载 Boost.Python 模块 - 未定义的符号
- Boost序列化加载失败并引发异常
- 从DLL加载函数到Boost函数
- openCV 3.0:如何保存/加载cv::ml::boost模型
- 如何加载一个序列化的boost::变体
- Boost:序列化重构(加载)
- Boost.Serialization 是否释放了在加载指针期间创建的内存
- 使用boost序列化从XML加载类