如何解决RSA指数d为负
我正在尝试使用RSA加密和解密各种消息,并且当d
为正数时它可以正常工作时,当d
为负数时显然会中断,因为d
应该是自然数。
我正在使用EXTENDED_EUCLID
算法进行查找,其代码如下。
void EXTENDED_EUCLID(cpp_int a,cpp_int b,cpp_int&d,cpp_int&x,cpp_int&y) {
cpp_int n_d = d,n_x = x,n_y = y;
if(b == 0) {
d = a;
x = 1;
y = 0;
} else {
cpp_int n_a = a % b;
if (n_a < 0) n_a += b;
EXTENDED_EUCLID(b,n_a,n_d,n_x,n_y);
d = n_d;
x = n_y;
y = n_x - a / b * n_y;
}
}
递归调用EXTENDED_EUCLID(b,n_y);
之前的两行代码来自我在https://crypto.stackexchange.com/questions/10805/how-does-one-deal-with-a-negative-d-in-rsa上找到的解决方案。显然我在这里做错了,也许他们需要放在其他地方?
使用名为EXTENDED_EUCLID
的函数中的以下参数EXTENDED_EUCLID(a,n,d,x,y);
进行MODULAR_LINEAR_EQUATION_SOLVER
的初始调用。在这种情况下,a
是e
(如果我没记错的话,是公钥),在这种情况下,n
或b
是φ(n)
。
感谢您为此付出时间,希望这个问题不会太愚蠢。
解决方法
解决方案是将EXTENDED_EUCLID(b,n_a,n_d,n_x,n_y);
递归调用上方的两行代码移至函数MODULAR_LINEAR_EQUATION_SOLVER
的初始EXTENDED_EUCLID
调用下方的两行。非常感谢James K. Polk总统。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。