做wireshark的http实验的时候,看到有个基于Base64编码的账号和密码,想到我啥都没做过,而且看着做这个不难,于是就自己用c++写了个简易版本。

没有系统学过c++,导致我对两个string的连接很迷,本来后面想用c的char*,后来才发现是我在定义主string的给它赋予了容量和初值string code(n,0),我以为副string的连接是从主string的第一个即code[0]开始,但其实是从主string最后的一个字符即code.size()连,所以就导致,前面一大堆无用的空格,加深了我对string连接的印象,还是可以的,我试了一下,一般的编码解码应该是能做到的,写了大概5个小时,收获还是有,就是太慢了。。

#include <algorithm>
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
class Solution
{private:const string base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";unordered_map<char, int> base64;void initial_map(){int i;for (i = 0; base64_table[i] != '\0'; i++){base64[base64_table[i]] = i;}}string jinZhi(int n, string &str) //数字转str.size()位 01字符串{int i;for (i = 0; i < (int)str.size(); i++) //数字转字符{str[i] = n % 2 + '0';n = n / 2;}reverse(str.begin(), str.end());return str;}int convert(string &str)//01字符串转数字{int i, sum = 0, n = str.size();for (i = 0; i < n; i++){sum += (str[n - 1 - i] - '0') << i;}return sum;}public:void encoding(string &str){int n = str.size() * 8, more = 0, flag = 1;while (n % 6 != 0){n += 8;more++;flag = 0;}string code; //初始化不需要设置大小和初值,因为本来就是需要把所有的都插进去string t(8, 0);int i, ASCLL;for (i = 0; i < (int)str.size(); i++){t = jinZhi(str[i], t);code += t; //字符串是补充到code最后一个字符后面,所以是补充到 n+1 后面}code.insert(code.size(), n - code.size(), '0'); //在后面补0if (more != 0)                                  //防止无效的0,输出Base表里的 A{n -= 6 * more;}for (i = 0; i < n; i += 6){t = code.substr(i, 6);ASCLL = convert(t);cout << base64_table[ASCLL];}while (more--) //最多有两个=,因为在每次加8的基础上,要被6整除,最多只需要加两次{cout << '=';}if (flag == 1)cout << '=';cout << endl;}void decoding(string str){initial_map();int i;int n = str.length();string code;string t(6, 0);string t1(8, 0);char ASCLL;for (i = 0; i < n; i++) //把字符转化为二进制{if (str[i] == '='){code.insert(code.size(), 6, '0');}else{t = jinZhi(base64[str[i]], t);code += t;}}for (i = 0; i < (int)code.size(); i += 8){t1 = code.substr(i, 8);ASCLL = convert(t1);cout << ASCLL;}cout << endl;}
};
int main()
{Solution s;string str;cout << "输入要加密的信息: " << endl;cin >> str;s.encoding(str);cout << "输入要解密的信息: " << endl;cin >> str;s.decoding(str);return 0;
}

自制Base64编码解码器相关推荐

  1. base64编码解码器【C++】

    在线编码解码工具https://base64.us/所有结果可以使用上述网站检验. 什么是base64编码? base64编码是一种编码方式 用64 + 1 个字符表示字符 本质是将三位8比特字符扩增 ...

  2. 实战|记一次绕过宝塔防火墙的BC站渗透

    0x00 信息收集 由于主站存在云waf 一测就封 且初步测试不存在能用得上的洞 所以转战分站 希望能通过分站获得有价值的信息 这是一个查询代理帐号的站 url输入admin 自动跳转至后台 看这个参 ...

  3. 百度UEditor 图片粘贴上传,实现图文粘贴,图片自动上传

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

  4. KindEditor实现WORD粘贴图片自动上传

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

  5. WordPress支持ppt一键上传

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

  6. SiteFactory支持ppt一键上传

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

  7. ZBlog支持ppt一键导入

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

  8. wangEditor粘贴word图片问题解决

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

  9. ueditor粘贴word图片无法显示的问题

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

最新文章

  1. Android网络连接异常处理方案
  2. npm run dev 后dist 被情况_npmamp;npxamp;nvmamp;yarn 介绍
  3. 如何利用大数据做金融风控? 原创 2016年11月24日 17:42:03 标签: 大数据 / 金融 / 风控 1594 导语:如何通过海量数据与欺诈风险进行博弈? 随着金融科技、科技金融等概念的
  4. c语言怎么让两个函数同时进行_Excel高级筛选怎么用同时满足多个条件进行筛选...
  5. Hadoop HA集群的搭建
  6. 如何制作一条网线?(双绞线在水晶头中的排列顺序)
  7. java 手动加载数据库驱动_JAVA加载数据库驱动(JDBC)
  8. java php quercus,php中Quercus框架的安装
  9. servlet 从oracle中结果集,用servlet对oracle进行增删改查
  10. python 面向对象的封装_Python面向对象封装操作案例详解
  11. 一整个网站的全部数据,我只能给你这么多了。
  12. Tensorflow2.0之FGSM
  13. ubuntu20 卸载显卡驱动失败_Ubuntu20.04显卡驱动安装
  14. 纳什均衡定义、举例、分类
  15. 计算机毕业设计android的安卓订餐多商家点餐app(源码+系统+mysql数据库+Lw文档)
  16. murmur3哈希算法
  17. nodejs部署的服务用localhost+端口可以访问,换成ip+端口就无法访问
  18. 庄帅:托管分销与物流集成战略雏形
  19. svn——“验证位置时发生错误”的解决办法
  20. 点线联合优化估计相机姿态(IROS 2022)

热门文章

  1. 字节跳动校招前端面经(2021.03.16)
  2. [渝粤教育] 中央财经大学 人力资源管理 参考 资料
  3. iOS集成Cordova开发教程遇到的问题
  4. 苹果开放降级通道_苹果出手,关闭降级系统iOS13验证,iOS14再也回不去了!
  5. 测试进阶篇之测试用例设计-百度云盘
  6. Flash游戏抓取,flash网站抓取,网页游戏提取工具
  7. 有符号和无符号整型的临界点
  8. Python挑战游戏( PythonChallenge)闯关之路Level 0
  9. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享
  10. How to debug HTTP requests when developing and testing Web applications and clients