📄 bignumber.h
字号:
#ifdef BIGNUMBER_EXPORTS
#define BIGNUMBER_API __declspec(dllexport)
#else
#define BIGNUMBER_API __declspec(dllimport)
#endif
#define MAXLENGTH 35
#ifndef __ABCD__
#define __ABCD__
// This class is exported from the BigNumber.dll
class BIGNUMBER_API CBigNumber {
public:
CBigNumber();
~CBigNumber();
//基本运算
void Init(unsigned __int64 bn);
void Init(const CBigNumber BN);
CBigNumber Add(const CBigNumber BN);
CBigNumber Sub(const CBigNumber BN);
CBigNumber Mul(const CBigNumber BN);
CBigNumber Div(const CBigNumber BN);
CBigNumber Mod(const CBigNumber BN);
CBigNumber Add(const unsigned long bn);
CBigNumber Sub(const unsigned long bn);
CBigNumber Mul(const unsigned long bn);
CBigNumber Div(const unsigned long bn);
unsigned long Mod(const unsigned long bn);
int Cmp(const CBigNumber BN);
//
//StringToBigNumber,从字符串按10进制或16进制格式输入到大数
//BigNumberToString,将大数按10进制或16进制格式输出到字符串
//CharsToNumber, 把输入的明文串按字节转换成数字,比如'a'->353,我->206210,原理是ascii码=256,
// 这样对于汉字可以得到区位码。所以dest的空间是sour的3倍加一个结束符。
//GetElapsedTime, 应该设置(10个字节足矣)长度且清空
//NumberToChars, 10进制字符串转换成ASCII码,最终得到明文
//StringToChars,把CString对象转换得到一个szChar串。
void StringToBigNumber(const CString str);
void BigNumberToString(char *str);
void CharsToNumber(char *dest, char *sour);
void NumberToChars(char *dest, const char *sour);
void GetElapsedTime(char *time, SYSTEMTIME before, SYSTEMTIME after);
void CharsToString(CString &dest, const char *sour);
void StringToChars(char *dest, const CString sour);
//
//RabinTest,拉宾米勒算法进行素数测试
//EolEqu,欧几里德算法求解同余方程
//RsaEn,反复平方算法进行幂模运算
//GetPrime,产生指定长度的随机大素数
//
int RabinTest();
CBigNumber SolEqu(const CBigNumber BN);
CBigNumber RsaEn(CBigNumber &A, CBigNumber &B);
void GetPrime(int nbits);
public:
unsigned m_nLength; // 大数有多少个unsigned long数组元素
unsigned long m_ulValue[MAXLENGTH];// 一个大数的大小:sizeof(MAXLENGTH*(unsigned long))
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -