VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1829|回复: 4

[求助] VC++如何加/解密Base64

[复制链接]
24_avatar_middle
在线会员 发表于 2016-4-6 17:41:32 | 显示全部楼层 |阅读模式
3驿站币
密文:YmFzZTY0dGVzdA==
明文:base64test
http://www1.tc711.com/tool/BASE64.htm

最佳答案

查看完整内容

其实微软自身的 ATL 中有现成的 Base64 的编解码函数,MFC中可以直接使用的: Base64Encode:https://msdn.microsoft.com/zh-cn/library/ezec6x4e(v=vs.80).aspx Base64Decode:https://msdn.microsoft.com/zh-cn/library/2fzdww6e(v=vs.80).aspx




上一篇:我想把静态文本框这个控件在mfc刷成黑色,但是复制的别人的源码,一直有问题
下一篇:如何申明或定义标识符
51_avatar_middle
online_admins 发表于 2016-4-6 17:41:33 | 显示全部楼层
其实微软自身的 ATL 中有现成的 Base64 的编解码函数,MFC中可以直接使用的:
Base64Encode:https://msdn.microsoft.com/zh-cn/library/ezec6x4e(v=vs.80).aspx
Base64Decode:https://msdn.microsoft.com/zh-cn/library/2fzdww6e(v=vs.80).aspx
78_avatar_middle
online_supermod 发表于 2016-4-6 20:58:32 | 显示全部楼层
  1. http://www.opensource.apple.com/source/QuickTimeStreamingServer/QuickTimeStreamingServer-452/CommonUtilitiesLib/base64.c?txt
复制代码
  1. http://www.opensource.apple.com/source/QuickTimeStreamingServer/QuickTimeStreamingServer-452/CommonUtilitiesLib/base64.h?txt
复制代码
62_avatar_middle
在线会员 发表于 2016-4-7 21:11:35 | 显示全部楼层
学习了。
74_avatar_middle
在线会员 发表于 2016-4-8 11:39:49 | 显示全部楼层
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdio>

  4. const char arrays[] =   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  5. std::string encryption(const char* data,std::size_t size);
  6. std::string encryption_loop(const char* data);

  7. std::string decryption(std::string data);
  8. std::string decryption_loop(const char* data);
  9. char find_char(char c);
  10. int main()
  11. {
  12.     std::string str = "BC";

  13.     std::string en  =   encryption(str.data(),str.size());
  14.     std::string de = decryption(en);

  15.     std::cout << str << "\n"
  16.               << en << "\n"
  17.               << de << "\n"
  18.               ;

  19.     return 0;
  20. }
  21. std::string encryption(const char* data,std::size_t size)
  22. {
  23.     std::string rs;

  24.     std::size_t fill = size %3;
  25.     std::size_t left_size = size - fill;

  26.     for(std::size_t i=0; i<left_size; i+=3)
  27.     {
  28.         rs += encryption_loop(data + i);
  29.     }

  30.     if(fill == 1)
  31.     {
  32.         char buffer[3] = {0};
  33.         buffer[0]   =   data[left_size];
  34.         rs += encryption_loop(buffer).substr(0,2);
  35.         rs += "==";
  36.     }
  37.     else if(fill == 2)
  38.     {
  39.         char buffer[3] = {0};
  40.         buffer[0]   =   data[left_size];
  41.         buffer[1]   =   data[left_size + 1];
  42.         rs += encryption_loop(buffer).substr(0,3);
  43.         rs += "=";
  44.     }

  45.     return rs;
  46. }
  47. std::string encryption_loop(const char* data)
  48. {
  49.     std::string rs;
  50.     char indexs[4] = {0};

  51.     indexs[0]   =   data[0] >> 2;
  52.     indexs[1]   =        ((data[0] & 0x3) << 4 )  | (data[1] >> 4) ;
  53.     indexs[2]   =   ((data[1] & 0xF) << 2) | (data[2] >> 6);
  54.     indexs [3]   =   data[2] & 0x3F;

  55.     for(int i=0; i<4; ++i)
  56.     {
  57.         rs.push_back(arrays[indexs[i]]);
  58.     }
  59.     return rs;
  60. }
  61. std::string decryption(std::string data)
  62. {
  63.     std::string rs;
  64.     for(int i=0; i<data.size(); i+=4)
  65.     {
  66.         rs += decryption_loop(data.data() + i);
  67.     }
  68.     return rs;
  69. }
  70. std::string decryption_loop(const char* data)
  71. {
  72.     std::string rs;
  73.     char indexs[4] = {find_char(data[0]),
  74.                       find_char(data[1]),
  75.                       find_char(data[2]),
  76.                       find_char(data[3])
  77.                      };
  78.     rs += (indexs[0] << 2 ) | (indexs[1] >> 4 );
  79.     if(indexs[2]!=-1)
  80.     {
  81.         rs += (indexs[1] << 4) | (indexs[2] >> 2);
  82.         if(indexs[3]!=-1)
  83.         {
  84.             rs += (indexs[2] << 6) | (indexs[3] );
  85.         }
  86.     }
  87.     return rs;
  88. }
  89. char find_char(char c)
  90. {
  91.     for(char i=0; i<sizeof(arrays) / sizeof(char); ++i)
  92.     {
  93.         if(arrays[i]==c)
  94.         {
  95.             return i;
  96.         }
  97.     }
  98.     return -1;
  99. }
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-25 01:00

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表