【发布时间】:2015-11-28 21:10:30
【问题描述】:
我正在使用椭圆曲线密码学并试图从我的 ECC 方程中获取一个值。我正在使用一个传入 x 的函数,我试图循环代码,直到我得到一个整数形式的 y 值。请注意,我还使用了一个名为 InfInt 的独立库(它处理大整数值)。
基本上,我的目标是找到一个 x,当它代入方程 y^2 = x^3 + x + 24 时,会得到一个不是十进制数的 y。我在获得正确结果时遇到了很多问题。我处理这个问题的方式有解决方案吗?
主代码中的代码______________________________________________________________ //为“真正的”随机x创建我们需要的种子 srand(时间(NULL));
//TEST PROMPT for getting a random point
int x = rand();
cout << ("Given x: ") << (x) << endl <<endl;
InfInt y;
int i = 0;
//TEST to get an exact point, not a decimal value
//while (i == 0) {
y = getPoint(x);
if (y == NULL) {
cout << ("Bad X") << endl;
x = rand();
cout << ("Next Attempt at x :") << (x) << endl;
}
else {
cout << ("Success!") << endl;
cout << ("Our point is: (") << (x) << (",") << (y) << (")") << endl;
i++;
}
//}
获取积分代码______________________________________________________________ InfInt getPoint(int x) {
double xx = pow(x, 3) + x + 24;
xx = sqrt(xx);
cout << (xx) << endl;
if (xx == int(xx)) {
y = int(xx);
} else {
cout << ("Failed!");
y = NULL;
}
return InfInt(y);
}
【问题讨论】:
-
我对这部分有点困惑:“......从给定的整数 x 中获取正确的 y 值,而不切断多余的浮点数?”你能试着重申你想要
x和y是什么吗?我的印象是整数应该去掉小数。 -
我很抱歉,这令人困惑。我要说的是,我试图循环遍历 x 的值,直到得到一个不是十进制数的 y。本质上,我的目标是找到一个 x,当它插入方程 y^2 = x^3 + x + 24 时,会给我一个不是十进制数的 y。是不是更清楚了?
-
好吧,这更有意义。我建议编辑您的问题以帮助其他人理解[:无论如何,请注意
long long y = xx在您的getPoint()函数的最后是如何被赋值的。这意味着无论您的函数是否通过if或else块,它都将始终分配给xx。改变它有帮助吗? -
不幸的是,它没有。不过我确实把那部分拿出来了。那是以前尝试使代码正常运行的尝试。
标签: c++ cryptography curve