首页
社区
课程
招聘
[求助]如何用Crypto++实现DES???
发表于: 2010-1-12 23:11 15318

[求助]如何用Crypto++实现DES???

2010-1-12 23:11
15318
如题。

在网上搜到的都是RSA,Signature,AES ,等等……
Crypto++ 的示例中是也没有 DES 演示,

难道DES真的老了,没人用了??

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
DES的密钥有些短,AES等较新的算法在密钥长度等几个参数上都有优势
2010-1-13 08:29
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
Crypto++ 那堆东西为什么我都看不懂...
请问有没有中文解说?
2010-1-13 09:23
0
雪    币: 2155
活跃值: (29)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
目前为止,

只知道Crypto++作者可能是华人

但是没有见到比较完整中文资料……

我对C++的高级特性无爱
2010-1-13 11:05
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
目前DES网上大概可以找到两个版本,
一个是比较常规的,还好懂。一个是优化过的,比较变态,难看懂。
老S来点分析就好了
2010-1-13 14:18
0
雪    币: 2155
活跃值: (29)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
我要的不是DES算法源代码,
我自己经用C实现了DES。

而是,
我现在想调用Crypto++ 这个库来做DES加密。
2010-1-13 15:07
0
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
没有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来说长度是不一样的?

这个问题问得似乎有点新人了。
2010-1-13 22:01
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
似乎是个很复杂的东西
2010-1-13 22:23
0
雪    币: 2155
活跃值: (29)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
顶7楼

高人啊,竟然会去读它的源码……
我只是看看头文件都会晕……

标准的DES算法里好像没有用到IV这东东,
至少我们老师讲DES时没有提起过IV。

我也试过使用 CFB_FIPS_Mode<DES_EDE3> 改为CFB_FIPS_Mode<DES>,
可以编译,可以运行,可是不知道为什麽,同一段明文,每次加密后密文都不同,但是可以正确解密。
2010-1-14 08:25
0
雪    币: 224
活跃值: (55)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
10
密切关注,刚刚了解该库的IO接口。
2010-9-1 12:03
0
游客
登录 | 注册 方可回帖
返回
//