gpt4 book ai didi

c - 如何在 C 中处理大量数字

转载 作者:太空狗 更新时间:2023-10-29 15:03:43 28 4
gpt4 key购买 nike

我正在用 C 编写一个 RSA 加密算法。我不打算将它投入生产,主要是为了拓宽我对加密的理解。

如何处理 RSA 生成的大量数字?即使在使用像 103 这样的相对较小的私钥进行解密时,我仍然有处理这样的事情的问题:

67^103 mod 143 = (1.21816096336830017301951805581 x 10^188) mod 143

存储这种大小的数字的最佳方法是什么?有没有办法使用标准库来做到这一点?.

最佳答案

错误的方法。 67^103 mod 143不需要先计算67^103

在循环中计算,一次取 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));
}

输出

89

关于c - 如何在 C 中处理大量数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311491/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com