- 论坛徽章:
- 0
|
怎样用C++加密一段数据?????
- // DES encrypt with OpenSSL support
- // g++ crypt.cc -lssl -o crypt
- #include <openssl/des.h>;
- #include <iostream>;
- int main(int argc, char** argv)
- {
- try
- {
- std::string keystring("this is my key");// 初始化key(密钥)
- DES_cblock key[1]; //具体是什么?不知道也一样可以用
- DES_key_schedule key_schedule; //字面意思是密码表
- if (NULL != argv[1])
- keystring.assign(argv[1]);//如果命令行指定了key,那么就用指定的
- // 生成一个 key
- DES_string_to_key(keystring.c_str(), key);
- if (DES_set_key_checked(key, &key_schedule) != 0)
- throw "DES_set_key_schedule";
- unsigned char input[] = "this is a text being encrypted by openssl";//需要加密的字符串
- size_t len = (sizeof(input)+7)/8 * 8;
- unsigned char *output = new unsigned char[len+1];
- //加密以后的内容怎么分配内存,照上面这两步走就是了
- //错了就干掉贴代码的人:mrgreen:
- DES_cblock ivec;
- //照这个搞就是了,用别人的代码不一定要知道所由的细节是为什么
- // 加密
- memset((char*)&ivec, 0, sizeof(ivec));//ivec清0
- DES_ncbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, 1);//这里就进行加密了
- std::cout << input << std::endl;
- //输出加密以后的内容
- for (int i = 0; i < len; ++i)
- printf("%02x", output[i]);
- std::cout << std::endl;
- // 解密
- memset((char*)&ivec, 0, sizeof(ivec));
- DES_ncbc_encrypt(output, input, len, &key_schedule, &ivec, 0);
- std::cout << input << std::endl;
-
- delete[] output;
- }
- catch(const char* errstr) //对抛出异常的处理
- {
- std::cerr << errstr << std::endl;
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
- }
复制代码
照这个用应该不成问题吧, 人家代码都出来了,其实用别人的东西,并不一定要了解所有的细节(除非得要了解某个东西才能用,那么就看人家的手册吧) |
|