#包含“Includes.h”
枚举算法
{
欧洲央行,
CBC,
CFB64,
OFB64,
};
河豚
{
公众:
结构键
{
无符号长P[18];
无符号长S[1024];
};
河豚(河豚算法);
无效处置();
void SetKey(无符号字符数据[]);
无符号字符加密(无符号字符缓冲区[]);
无符号字符解密(无符号字符缓冲区[]);
char EncryptIV();
char DecryptIV();
私人:
BlowfishAlgorithm\u算法;
无符号字符加密IV[200];
无符号字符[200];
int_encryptNum;
int_decryptNum;
};
类游戏加密
{
公众:
河豚(河豚);;
GameCryptography(无符号字符密钥[]);
无效解密(无符号字符包[]);
无效加密(未签名字符包[]);
河豚;河豚;
无效设置键(无符号字符k[]);
void SetIvs(无符号字符i1[],无符号字符i2[]);
};
GameCryptography::GameCryptography(未签名的字符密钥[])
{
}
错误:IntelliSense:类“Blowfish”不存在默认构造函数
如果您定义一个没有任何构造函数的类,编译器将为您合成一个构造函数(这将是一个默认构造函数,即不需要任何参数的构造函数)。但是,如果您定义了一个构造函数(即使它包含一个或多个参数),编译器将不会为您合成一个构造函数——在这一点上,您已经承担了构造该类对象的责任,因此编译器可以说是“退一步”,并将该工作留给您
你有两个选择。您需要提供默认构造函数,或者在定义对象时需要提供正确的参数。例如,您可以将构造函数更改为如下所示:
河豚(河豚算法=CBC);
…因此,可以在不(显式)指定算法的情况下调用ctor(在这种情况下,它将使用CBC作为算法)
另一种选择是在定义河豚对象时显式指定算法:
类游戏加密{
河豚;河豚;
公众:
GameCryptography():河豚{(ECB){}
// ...
};
C++ 11(或以后),你还有一个选项可用。您可以定义接受参数的构造函数,但如果未定义参数,则告诉编译器生成该构造函数:
类游戏加密{
公众:
//定义接受参数的ctor
游戏加密(BlofishAlgorithm);
//告诉编译器,如果我们没有定义一个ctor,它会做什么:
GameCryptography()=默认值;
};
最后,我认为值得一提的是,ECB、CBC、CFB等都是操作模式,而不是真正的加密算法本身。调用这些算法不会给编译器带来麻烦,但是不合理地可能会给其他阅读代码的人带来问题