免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8913 | 回复: 11
打印 上一主题 下一主题

[C++] 怎样用C++加密一段数据????? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-05 18:02 |只看该作者 |倒序浏览
怎样用C++加密一段数据,步骤有那些??谁有那方面的原码发给小弟读一下,好吗??????
小弟邮箱:cheng168520@163.com
QQ:35170094

论坛徽章:
0
2 [报告]
发表于 2005-08-05 21:39 |只看该作者

怎样用C++加密一段数据?????



  1. // DES encrypt with OpenSSL support
  2. // g++ crypt.cc -lssl -o crypt

  3. #include <openssl/des.h>;
  4. #include <iostream>;

  5. int main(int argc, char** argv)
  6. {
  7.         try
  8.         {
  9.                 std::string keystring("this is my key");
  10.                 DES_cblock key[1];
  11.                 DES_key_schedule key_schedule;

  12.                 if (NULL != argv[1])
  13.                         keystring.assign(argv[1]);

  14.                 // Generate a key
  15.                 DES_string_to_key(keystring.c_str(), key);
  16.                 if (DES_set_key_checked(key, &key_schedule) != 0)
  17.                         throw "DES_set_key_schedule";

  18.                 unsigned char input[] = "this is a text being encrypted by openssl";
  19.                 size_t len = (sizeof(input)+7)/8 * 8;
  20.                 unsigned char *output = new unsigned char[len+1];
  21.                 DES_cblock ivec;

  22.                 // Encrypt
  23.                 memset((char*)&ivec, 0, sizeof(ivec));
  24.                 DES_ncbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, 1);
  25.                 std::cout << input << std::endl;

  26.                 for (int i = 0; i < len; ++i)
  27.                         printf("%02x", output[i]);
  28.                 std::cout << std::endl;

  29.                 // Decrypt
  30.                 memset((char*)&ivec, 0, sizeof(ivec));
  31.                 DES_ncbc_encrypt(output, input, len, &key_schedule, &ivec, 0);
  32.                 std::cout << input << std::endl;
  33.                
  34.                 delete[] output;
  35.         }
  36.         catch(const char* errstr)
  37.         {
  38.                 std::cerr << errstr << std::endl;
  39.                 return EXIT_FAILURE;
  40.         }

  41.         return EXIT_SUCCESS;
  42. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-08-05 21:41 |只看该作者

怎样用C++加密一段数据?????

看过就是没用过,自己写的异或什么的又太丑陋了,所以不敢回贴:)

嗯,好东西,顶一下

论坛徽章:
0
4 [报告]
发表于 2005-08-05 22:06 |只看该作者

怎样用C++加密一段数据?????

你首先要确定几件事情:

使用什么类型加密算法?对称还是非对称?然后再决定具体采用的算法。
对称算法可以去找DES,非对称的可以用RSA。推荐这两个算法是因为这两个算法的使用最为广泛,也最容易获得。

论坛徽章:
0
5 [报告]
发表于 2005-08-06 13:42 |只看该作者

怎样用C++加密一段数据?????

rorot   你好,能将代码注释加多点吗?????

论坛徽章:
0
6 [报告]
发表于 2005-08-06 13:48 |只看该作者

怎样用C++加密一段数据?????

照着用就行了, 要是英语单词看不懂, 多查查辞典

论坛徽章:
0
7 [报告]
发表于 2005-08-06 15:50 |只看该作者

怎样用C++加密一段数据?????

我想好好读一下,可是一些函数不知什么意思,帮帮忙写一下???
如DES_cblock,DES_key_schedule 这是什么类型????

论坛徽章:
0
8 [报告]
发表于 2005-08-06 16:09 |只看该作者

怎样用C++加密一段数据?????

  1. // DES encrypt with OpenSSL support
  2. // g++ crypt.cc -lssl -o crypt

  3. #include <openssl/des.h>;
  4. #include <iostream>;

  5. int main(int argc, char** argv)
  6. {
  7.    try
  8.    {
  9.       std::string keystring("this is my key");// 初始化key(密钥)
  10.       DES_cblock key[1];   //具体是什么?不知道也一样可以用
  11.       DES_key_schedule key_schedule;   //字面意思是密码表

  12.       if (NULL != argv[1])
  13.          keystring.assign(argv[1]);//如果命令行指定了key,那么就用指定的

  14.       // 生成一个 key
  15.       DES_string_to_key(keystring.c_str(), key);
  16.       if (DES_set_key_checked(key, &key_schedule) != 0)
  17.          throw "DES_set_key_schedule";

  18.       unsigned char input[] = "this is a text being encrypted by openssl";//需要加密的字符串
  19.       size_t len = (sizeof(input)+7)/8 * 8;  
  20.       unsigned char *output = new unsigned char[len+1];
  21.        //加密以后的内容怎么分配内存,照上面这两步走就是了
  22.        //错了就干掉贴代码的人:mrgreen:
  23.       DES_cblock ivec;  
  24.        //照这个搞就是了,用别人的代码不一定要知道所由的细节是为什么

  25.       // 加密
  26.       memset((char*)&ivec, 0, sizeof(ivec));//ivec清0
  27.       DES_ncbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, 1);//这里就进行加密了
  28.       std::cout << input << std::endl;

  29.       //输出加密以后的内容
  30.       for (int i = 0; i < len; ++i)
  31.          printf("%02x", output[i]);
  32.       std::cout << std::endl;

  33.       // 解密
  34.       memset((char*)&ivec, 0, sizeof(ivec));
  35.       DES_ncbc_encrypt(output, input, len, &key_schedule, &ivec, 0);
  36.       std::cout << input << std::endl;
  37.       
  38.       delete[] output;
  39.    }
  40.    catch(const char* errstr)   //对抛出异常的处理
  41.    {
  42.       std::cerr << errstr << std::endl;
  43.       return EXIT_FAILURE;
  44.    }

  45.    return EXIT_SUCCESS;
  46. }
复制代码

照这个用应该不成问题吧, 人家代码都出来了,其实用别人的东西,并不一定要了解所有的细节(除非得要了解某个东西才能用,那么就看人家的手册吧)

论坛徽章:
0
9 [报告]
发表于 2005-08-06 16:18 |只看该作者

怎样用C++加密一段数据?????

谢谢luojiannx

论坛徽章:
0
10 [报告]
发表于 2011-11-01 16:43 |只看该作者
DES_ncbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, 1);
DES_ncbc_encrypt(output, input, len, &key_schedule, &ivec, 0);

想问下。DES_ncbc_encrypt 函数的第3个参数是什么意思啊?
看代码,好像是 1)加密时候,明文的长度;2)解密时候,密文的长度。

但我稍微改下了代码:
解密时候:DES_ncbc_encrypt(output, input, 2, &key_schedule, &ivec, 0);
把长度改成别的值,也能够得到明文,这是为什么啊?

我man DES_ncbc_encrypt,也没找到具体的说明,
有没有哪位大哥能够解释一下啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP