BigInteger
任何人都可以为提供 PowMod 函数的objective-c 中的实现提供代码吗?
5 回答
我希望现在回答这个问题还为时不晚。
您可以尝试开源和免费的“ LibTomMath ”(作者将此项目作为公共领域赠送)。它开箱即用,无需任何配置,只需将所有 bn_*.c 和 tommath*.h 放入您的 Xcode 项目,您就可以开始使用了。
#import "tommath.h"
mp_int number1, number2, number3;
mp_init(&number1);
mp_init(&number2);
mp_init(&number3);
mp_read_radix(&number1, "0a120edfff558c98a73015d5d67e8990", 16);
mp_read_radix(&number2, "12e6f45d698c7b7009a841c1348d6ff4", 16);
mp_mul(&number1, &number2, &number3);
char output[1000];
mp_toradix(&number3, output, 16);
NSLog(@"number3:%s", output);
mp_div(&number3, &number1, &number2, NULL);
mp_toradix(&number2, output, 16);
NSLog(@"number2:%s", output);
作为普通的 C 库,openssl 的BN应该可以做到。
BN_mod_exp()
计算 a 的 p 次幂模 m (r=a^p % m)。此函数比 BN_exp() 使用的时间和空间更少。
你可以试试https://github.com/kirsteins/JKBigInteger跟Java的BigInteger
类差不多。它有你可以组合的 mod 和 pow 方法。
Cocoa 库中最接近的内置类NSDecimalNumber
为尾数 x 10^exponent 范围提供 base-10 算术(因此可以处理仅整数算术),其中尾数是 38 位浮点数,指数是 -128 到 128。如果涵盖了您需要的范围,有乘法和幂法。否则,由于 Objective-C 是 C 的超集,因此您可以找到任何 bigint 的 C 实现就足够了。
很久以前,我曾经在 GMP 周围滚动过一次自己的包装。我以前从未使用过任何第三方 BigNum ObjC 库,但我将这些添加为书签:使用 OpenSSL bignum 函数的RSMath和使用 GMP的MPInteger 。