base64 encoding
//https://en.wikipedia.org/wiki/Base64
std::string base64Encode(const std::vector<char>& byteData);
std::vector<char> base64Decode(std::string & const inputString);
std::string Cbase64Dlg::base64Encode(const std::vector<char>& byteData)
{
const std::string codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
std::string base64String;
int b;
for (size_t i = 0; i < byteData.size(); i = i+3)
{
b = (byteData[i] & 0xFC) >> 2;
base64String.push_back(codes[b]);
b = (byteData[i] & 0x03) << 4;
if (i + 1 < byteData.size())
{
b |= (byteData[i + 1] & 0xF0) >> 4;
base64String.push_back(codes[b]);
b = (byteData[i + 1] & 0x0F) << 2;
if (i+2 < byteData.size())
{
b |= (byteData[i + 2] & 0xC0) >> 6;
base64String.push_back(codes[b]);
b = byteData[i + 2] & 0x3F;
base64String.push_back(codes[b]);
}
else
{
base64String.push_back(codes[b]);
base64String.append("=");
}
}
else
{
base64String.push_back(codes[b]);
base64String.append("==");
}
}
return base64String;
}
std::vector<char> Cbase64Dlg::base64Decode(std::string & const inputString)
{
static std::string codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
std::vector<char> decoded;
if (inputString.length() % 4 != 0)
{
return std::vector<char>();
}
//The ratio of output bytes to input bytes is 4:3
int outLen = (inputString.length() * 3 / 4);
size_t pos = inputString.find_first_of('=');
if (pos != std::string::npos)
{
decoded.resize(outLen - (inputString.length() - pos));
}
else
{
decoded.resize(outLen);
}
int j = 0;
int b[4] = {};
const char* p = inputString.c_str();
while(p && *p && j < outLen)
{
bool valid = false;
for (int i=0; p && i < 4; ++i)
{
size_t pos = codes.find_first_of(*p++);
if ( pos != std::string::npos)
{
b[i] = pos;
}
}
if (j < outLen)
{
decoded[j++] = (byte) ((b[0] << 2) | (b[1] >> 4));;
if (j < outLen && b[2] < 64)
{
decoded[j++] = (byte) ((b[1] << 4) | (b[2] >> 2));
if (j < outLen && b[3] < 64)
{
decoded[j++] = (byte) ((b[2] << 6) | b[3]);
}
}
}
}
return decoded;
}
void Cbase64Dlg::OnBnClickedButton1()
{
char myints[] = "ABC&&&&&&&&&&";
std::vector<char> byte (myints, myints + sizeof(myints) / sizeof(char) );
std::string value = base64Encode(byte);
std::cout << value << std::endl;
std::vector<char>decode = base64Decode(value);
}
base64 encoding的更多相关文章
- Control character in cookie value, consider BASE64 encoding your value , java操作cookie遇到中文会报错的解决方案
项目当中用到cookie保存中文,但是会报如下错误: Control character in cookie value, consider BASE64 encoding your value 大概 ...
- Control character in cookie value, consider BASE64 encoding your value-Cookie保存中文出错[转]
项目当中用到cookie保存中文,但是会报如下错误: Control character in cookie value, consider BASE64 encoding your value 大概 ...
- Node.js Base64 Encoding和Decoding
如何在Node.js中encode一个字符串呢?是否也像在PHP中使用base64_encode()一样简单? 在Node.js中有许多encoding字符串的方法,而不用像在JavaScript中那 ...
- Base64 Encoding / Decoding in Node.js
Posted on April 20th, 2012 under Node.js Tags: ASCII, Buffer, Encoding, node.js, UTF So how do you e ...
- 使用Cookie报错Control character in cookie value, consider BASE64 encoding your value
参考资料: http://www.blogjava.net/persister/archive/2009/10/02/297103.html http://blog.csdn.net/xiaozhen ...
- Control character in cookie value, consider BASE64 encoding your value
这是因为你给Cookie设置了中文的value,比如Cookie c = new Cookie("user", "张三");
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- [c] base64
/ * Program: * base64 encode & decode * Author: * brant-ruan * Date: * 2016-02-29 * Usage: * Enc ...
- Base64编码格式详解
什么是Base64? 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式.(The Base64 Content-T ...
随机推荐
- Spine的纹理导出问题
发现美术给过来的资源,集合到unity后,发现用Spine的默认材质Spine/Skeleton有毛边问题.对比demo的图片后发现demo的图片(都是png格式)没有白色块,而自己的图片有. 原因是 ...
- 实用Linux命令,不求最全但求实用-------磁盘使用情况du,df
命令: df -h 输出实例: 文件系统 容量 已用 可用 已用% 挂载点 /dev/md0 9.7G 4.7G 4.6G 51% / ...
- Linux系统添加硬盘设备(磁盘分区-格式化-挂载-使用)
当全新安装了一块新的硬盘设备后,为了更充分.更安全的利用硬盘空间首先要进行磁盘的分区, 然后格式化,最后挂载使用. 实例:对新添加的硬盘设备进行分区.格式化并挂载到/newFS目录. 第一步:在vmw ...
- activeMQ主要的几类集群部署方式
官方主从实现的文档:http://activemq.apache.org/masterslave.html 一.activeMQ主要的几类部署方式比较 1.默认的单机部署(kahadb) acti ...
- USACO Section 3.3: A Game
第一次碰到博弈论题目,是很棘手,博弈论题目要考虑全局最优的解法,我第一次用了局部最优的,而且vector也没pop_front()操作.后来看了网上的用dp的方法解的. 博弈论的题目基本都得用dp法子 ...
- node-odata: 基于 NodeJS 的 REST 框架
该开源项目目前已被 OData 官网 (odata.org)收录 关于 node-odata node-odata 可以让你轻松创建 REST API, 并能使用 OData 协议的格式进行数据的查询 ...
- spring mvc 导出 excel
// js 触发导出 excel 方法 导出当前页的数据 含有条件查询的结果 // js 框架使用的 是 easyui function doExport(){ var optins = $(&quo ...
- Hibernate 异常 —— No CurrentSessionContext configured
在使用 SessionFactory 的 getCurrentSession 方法时遇到如下异常 “No CurrentSessionContext configured ” 原因是: 在hibern ...
- R语言屏幕输出
cat("the total number is:",3+5,"\n") print(x, ...) ?print?cat?format ?write
- hdu 5718 Oracle 高精度
Oracle Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem ...