首页 新闻 会员 周边 捐助

c++使用 cryptopp562 加密解密问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-10-25 17:46

我使用vs2010进行c++开发  使用cryptopp类库最新版本 cryptopp562

使用AES加密 填充模式为None 加密模式为ECB

加密字符串为 "123"  密钥16进制表现形式为:AA9EEB723F484ABBDDF890C980EF1DC2

我手动填充补足16位的倍数 手动填充值为十进制 0

--------------------------------------------------

当我对字符串加密后  加密后生成的16进制字符串为:

41E9859DC28714D53552EF4C005FDDCAE8F43BE21DC104D7B78A0038BD9DC73A

当我用解密方法

 1 string AESManager::aes_decrypt(const string &instr, const byte *passPhrase)
 2 {
 3     string recovered;
 4     try
 5     {
 6         ECB_Mode< AES >::Decryption d;
 7         d.SetKey( passPhrase, AES::DEFAULT_KEYLENGTH );
 8         StringSource( instr, true, 
 9             new StreamTransformationFilter( d,
10             new StringSink( recovered )
11             ) 
12             );
13     }
14     catch( CryptoPP::Exception& e )
15     {
16         cerr << e.what() << endl;
17         exit(1);
18     }
19     return recovered;
20 }
View Code

会出现异常信息为:

StreamTransformationFilter: ciphertext length is not a multiple of block size

  经过分析 是传入后的 instr 长度不是16倍数所致 因为cryptopp判断instr长度 是用size()来判断 而

41E9859DC28714D53552EF4C005FDDCAE8F43BE21DC104D7B78A0038BD9DC73A

“00”出现在12位  因此cryptopp会认为instr长度为12  不足16   

请问  我如何用简单的方法 来避免这个问题呢?

果果天涯的主页 果果天涯 | 初学一级 | 园豆:16
提问于:2013-10-25 17:15
< >
分享
最佳答案
0

不要用 string 版本的,改用固定长度字节流版本的 api,也就是要求传入:

(const unsigned char * cipher,size_t size)

收获园豆:10
Launcher | 高人七级 |园豆:45050 | 2013-10-25 17:40

果然可以 谢谢 !  

我顺便把改后的代码发出来 以后谁遇到此问题可以一瞥

 1 string AESManager::aes_decrypt(const byte *instr, const byte *passPhrase,size_t length)
 2 {
 3     string recovered;
 4     try
 5     {
 6         ECB_Mode< AES >::Decryption d;
 7         d.SetKey( passPhrase, AES::DEFAULT_KEYLENGTH );
 8         StringSource( instr,length, true, 
 9             new StreamTransformationFilter( d,
10             new StringSink( recovered )
11             ) 
12             );
13     }
14     catch( CryptoPP::Exception& e )
15     {
16         cerr << e.what() << endl;
17         exit(1);
18     }
19     return recovered;
20 }
View Code

 

果果天涯 | 园豆:16 (初学一级) | 2013-10-25 17:46

@果果天涯: 你这个 cryptopp类库 是第三方提供的吗?我看代码书写的形式还挺好的。

Launcher | 园豆:45050 (高人七级) | 2013-10-25 17:51

@Launcher: cryptopp是开源类库 地址在:http://www.cryptopp.com/

上面函数是自己写的

果果天涯 | 园豆:16 (初学一级) | 2013-10-25 17:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册