mst*_*agg 5 c encryption algorithm
我正在用C编写RSA加密算法.我不打算在任何地方投入生产,主要是因为我可以扩展我对加密的理解.
我如何处理RSA产生的大量数字?即使用像103这样的相对较小的私钥执行解密,我仍然有处理这样的事情的问题:
67 ^ 103 mod 143 =(1.21816096336830017301951805581 x 10 ^ 188)mod 143
存储多个大小的最佳方法是什么?有没有办法使用标准库?.
错误的做法。 67^103 mod 143不需要先计算67^103。
循环计算modulo,一次计算 1 位指数。
uint32_t powmod(uint32_t base, uint32_t expo, uint32_t mod) {
// % mod need only for the cases expo==0, mod<=1
uint32_t y = 1u % mod;
while (expo) {
if (expo & 1u) {
y = ((uint64_t) base * y) % mod;
}
expo >>= 1u;
base = ((uint64_t) base * base) % mod;
}
return y;
}
int main(void) {
printf("%lu",(unsigned long) powmod(67, 103, 143));
}
Run Code Online (Sandbox Code Playgroud)
输出
89
Run Code Online (Sandbox Code Playgroud)