没有doc吗?
http://www.cryptopp.com/
http://sourceforge.net/projects/cryptopp/
这几个都是可以参考的。
或者通过SVN获取最新的文档。
svn co https://cryptopp.svn.sourceforge.net/svnroot/cryptopp cryptopp
这个是早期4.0版本的DES加密函数包含DES.h就可以了
enum CipherDir {ENCRYPTION, DECRYPTION};
DES::DES(const byte *key, CipherDir dir)这个是类的构造函数
void DES::ProcessBlock(const byte *inBlock, byte * outBlock) const
现在最新的是5.60了,看起来更麻烦了,大量使用了C++的模板类的东西。
在其中的DES.h文件中发现这么一句:
// disable DES in DLL version by not exporting this function
如果还是坚持要用的话,可能需要先修改为导出该方法才可以。
static const char * StaticAlgorithmName() {return "DES";}
在前面加上CRYPTOPP_DLL 就可以了。5.60的也可以类似修改。
另外还有一个地方也是要修改的,仔细找找就是了。这个库很大,每次我修改代码之后重新编译都很慢,郁闷了。
可以这样来写
DES::Encryption encryption_DES;
encryption_DES.SetKey(key, DES::KEYLENGTH);
encryption_DES.ProcessBlock(plaintext, ciphertext);
DES::Decryption decryption_DES;
decryption_DES.SetKey(key, DES::KEYLENGTH);
decryption_DES.ProcessBlock(ciphertext, decrypted);
if (memcmp(plaintext, decrypted, 24) != 0)
{
cerr << "DES Encryption/decryption failed.\n";
abort();
}
cout << "DES Encryption/decryption succeeded.\n";
另外我发现代码中给出的DES3的代码是这样的:
CFB_FIPS_Mode<DES_EDE3>::Encryption encryption_DES_EDE3_CFB;
encryption_DES_EDE3_CFB.SetKeyWithIV(key, sizeof(key), iv);
encryption_DES_EDE3_CFB.ProcessString(ciphertext, plaintext, 24);
CFB_FIPS_Mode<DES_EDE3>::Decryption decryption_DES_EDE3_CFB;
decryption_DES_EDE3_CFB.SetKeyWithIV(key, sizeof(key), iv);
decryption_DES_EDE3_CFB.ProcessString(decrypted, ciphertext, 24);
if (memcmp(plaintext, decrypted, 24) != 0)
{
cerr << "DES-EDE3-CFB Encryption/decryption failed.\n";
abort();
}
cout << "DES-EDE3-CFB Encryption/decryption succeeded.\n";
我尝试过套用相同的模板,可是在运行时会出错,如果按照CFB_FIPS_Mode来分类,DES属于那种?我还尝试过CFB_Mode也出错。。
再好奇问问,DES不用设置IV的吗?我对DES调用SetKeyWithIV就会出错,DES3则没错。还是说IV对于DES和DES3来说长度是不一样的?
这个问题问得似乎有点新人了。