我使用RSA算法进行加密/解密,为了解密文件,你必须处理一些非常大的值.更具体地说,像
P = C^d % n
= 62^65 % 133
Run Code Online (Sandbox Code Playgroud)
现在这真的是唯一不适当的计算.我尝试过使用Matt McCutchen的BigInteger库,但是在链接过程中我遇到了很多编译错误,例如:
encryption.o(.text+0x187):encryption.cpp: undefined reference to `BigInteger::BigInteger(int)'
encryption.o(.text+0x302):encryption.cpp: undefined reference to `operator<<(std::ostream&, BigInteger const&)'
encryption.o(.text$_ZNK10BigIntegermlERKS_[BigInteger::operator*(BigInteger const&) const]+0x63):encryption.cpp: undefined reference to `BigInteger::multiply(BigInteger const&, BigInteger const&)'
Run Code Online (Sandbox Code Playgroud)
所以我想知道处理RSA算法产生的真正大整数的最佳方法是什么.
我听说有可能将你的变量声明为双倍长,所以......
long long decryptedCharacter;
Run Code Online (Sandbox Code Playgroud)
但我不确定可以存储多大的整数.
好吧,例如,我尝试使用dev C++编译并运行以下程序:
#include iostream
#include "bigint\BigIntegerLibrary.hh"
using namespace std;
int main()
{
BigInteger a = 65536;
cout << (a * a * a * a * a * a * a * a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我得到了那些错误.
Derek,我认为通过包含BigIntegerLibrary.hh文件,编译器会经历并编译它将使用的所有必要文件. …
有没有办法构建例如(853467 * 21660421200929) % 100000000000007没有BigInteger库(请注意,每个数字都适合64位整数,但乘法结果不适合)?
这个解决方案效率低下:
int64_t mulmod(int64_t a, int64_t b, int64_t m) {
if (b < a)
std::swap(a, b);
int64_t res = 0;
for (int64_t i = 0; i < a; i++) {
res += b;
res %= m;
}
return res;
}
Run Code Online (Sandbox Code Playgroud) 我想编码用于计算pow(a,b)%MOD的值.我使用C++进行编码.
但问题是b的值可能非常大.我知道log(b)时间复杂度方法.但是,b的值可能不适合C++的"long long"数据类型.例如,b可以是1000000000个斐波那契数.这样一个大数字的精确计算本身是不可能的(在时间限制内).
PS:
是否有诀窍在Javascript中获取大数字的模数.我得到了modulo(7, 16971, 25777) 无穷无尽的7 ^ 16971mod25777 = NaN
function modulo (n, p, m){
var x = Math.pow(n, p);
var y = m;
var z = x%y;
alert(x);
return z;
}
Run Code Online (Sandbox Code Playgroud) 我需要在我的c ++程序中使用pow,如果我以pow()这种方式调用函数:
long long test = pow(7, e);
Run Code Online (Sandbox Code Playgroud)
哪里
e是整数值,值为23.
我总是得到821077879结果.如果我用Windows计算器计算它我得到27368747340080916343..这里有什么不对?):
我试图投射到不同类型,但没有任何帮助...这可能是什么原因?我怎么能pow()正确使用?
谢谢!
这是一个家庭作业问题.
我需要计算45 ^ 60 mod 61.我想知道任何快速方法以编程方式或手动方式获得结果,无论哪个更快.
我必须把这个公式变成java代码:
如果我可以使用像Math.BigInteger这样的库会更容易,但遗憾的是我应该在没有它的情况下这样做.stackoverflow上的一些类似问题建议编写一个自己的bignum库,但我想在没有它的情况下这样做.
现在,我的进展是在这一步:
int h(String s) {
long value = 1;
int mod = ht.length;
for (int i=0; i < s.length()-1; i++) {
h += s.charAt(i) * Math.pow(256,i);
}
return (int) h % mod;
}
Run Code Online (Sandbox Code Playgroud)
我知道功率的值在整数范围内变得非常快,所以我想到编写一个自己的方法来计算值的功率和模数.我的数学知识还不足以知道何时使用模数以及如何简化事物.
提前致谢!
例如,如果A = 864927518,B = 1462579282,M = 193773611,如何计算(A^B)%M?
有一个简单的方法吗?