unsigned char * base64 = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

 CString ToolFiles::base64encode(CString src, int srclen)
{
int n, buflen, i, j;
static unsigned char *dst;
CString buf = src;
buflen = n = srclen;
dst = (unsigned char*)malloc(buflen / * + );
memset(dst, , buflen / * + );
for (i = , j = ; i <= buflen - ; i += , j += ) {
dst[j] = (buf[i] & 0xFC) >> ;
dst[j + ] = ((buf[i] & 0x03) << ) + ((buf[i + ] & 0xF0) >> );
dst[j + ] = ((buf[i + ] & 0x0F) << ) + ((buf[i + ] & 0xC0) >> );
dst[j + ] = buf[i + ] & 0x3F;
}
if (n % == ) {
dst[j] = (buf[i] & 0xFC) >> ;
dst[j + ] = ((buf[i] & 0x03) << );
dst[j + ] = ;
dst[j + ] = ;
j += ;
}
else if (n % == ) {
dst[j] = (buf[i] & 0xFC) >> ;
dst[j + ] = ((buf[i] & 0x03) << ) + ((buf[i + ] & 0xF0) >> );
dst[j + ] = ((buf[i + ] & 0x0F) << );
dst[j + ] = ;
j += ;
}
for (i = ; i < j; i++)
dst[i] = base64[(int)dst[i]];
dst[j] = ;
return CString(dst);
} CString ToolFiles::base64decode(CString inpt, int * len)
{
int n, i, j, pad;
unsigned char *p;
static unsigned char *dst;
unsigned char * src;
*len = ;
pad = ;
n = inpt.GetLength();
src = new unsigned char[n];
for (i = ; i < n; i++)
src[i] = inpt[i]; while (n> && src[n - ] == '=') {
src[n - ] = ;
pad++;
n--;
}
for (i = ; i < n; i++) {
p = (unsigned char *)strchr((const char *)base64, (int)src[i]);
if (!p)
break;
src[i] = p - (unsigned char *)base64;
} dst = (unsigned char *)malloc(n * / + );
memset(dst, , n * / + );
for (i = , j = ; i < n; i += , j += ) {
dst[j] = (src[i] << ) + ((src[i + ] & 0x30) >> );
dst[j + ] = ((src[i + ] & 0x0F) << ) + ((src[i + ] & 0x3C) >> );
dst[j + ] = ((src[i + ] & 0x03) << ) + src[i + ];
*len += ;
}
*len -= pad;
return CString(dst);
}

有问题 加我QQ:97184072

MFC BASE64加解密 算法的更多相关文章

  1. base64加/解密算法C++实现

    base64编码原理:维基百科 - Base64 其实编码规则很简单,将字符串按每三个字符组成一组,因为每个字符的 ascii 码对应 0~127 之间(显然,不考虑其他字符集编码),即每个字符的二进 ...

  2. java base64加解密

    接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...

  3. 3des加解密算法

    编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...

  4. QQ协议的TEA加解密算法

    QQ通讯协议里的加解密算法. #include <stdio.h> #include <stdlib.h> #include <memory.h> #include ...

  5. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

  6. AES加解密算法Qt实现

    [声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...

  7. C#加解密算法

    先附上源码 加密解密算法目前已经应用到我们生活中的各个方面 加密用于达到以下目的: 保密性:帮助保护用户的标识或数据不被读取. 数据完整性:帮助保护数据不被更改. 身份验证:确保数据发自特定的一方. ...

  8. AES加解密算法在Android中的应用及Android4.2以上版本调用问题

     from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...

  9. [转]RSA,DSA等加解密算法介绍

    From : http://blog.sina.com.cn/s/blog_a9303fd90101cgw4.html 1)      MD5/SHA MessageDigest是一个数据的数字指纹. ...

随机推荐

  1. jquery.lazyload(懒加载)的使用与配置

    jquery lazyload是一款基于jquery框架的图片延迟加载应用,它可以让用户访问页面的时候只显示当前屏幕所示的图片.原理为利用JS替换图片src为loading图片,新data-origi ...

  2. php数据类型之查看和判断数据类型

    我们知道了一个数据的类型,才能进行下一步操作.后面的时候,大家可以学习到更多的知识——自定义功能(函数). 我们来做一个场景模拟:(注:眼前不用会写这个函数,以后会教大家) 假设,我们可以写一个智能的 ...

  3. elasticsearch 集群管理(集群规划、集群搭建、集群管理)

    一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...

  4. 六十一.常用组件 、 Kafka集群 、 Hadoop高可用

    1.Zookeeper安装搭建Zookeeper集群并查看各服务器的角色停止Leader并查看各服务器的角色 1.1 安装Zookeeper1)编辑/etc/hosts ,所有集群主机可以相互 pin ...

  5. Es6请求封装

    function registryToast(){ vue.prototype.$toast=showToast } export default registryToast   import './ ...

  6. P3688 [ZJOI2017] 树状数组 【二维线段树】

    题目描述:这里有一个写挂的树状数组: 有两种共\(m\)个操作: 输入\(l,r\),在\([l,r]\)中随机选择一个整数\(x\)执行\(\text{Add}(x)\) 输入\(l,r\),询问执 ...

  7. Unity 与 Android 互调用

    https://www.jianshu.com/p/b5e3cfcdf081 Unity 项目中一些需要访问安卓操作系统的功能,比如获取电量,wifi 状态等,需要 Unity 启动安卓系统的 Bro ...

  8. Intellij IDEA常用操作

    1.DEBUG过程中查看指定表达式的值(alt+左键) 2.DEBUG过程中查看指定表达式的值的另一个方法(ctrl+u) 这个快捷键会弹出一个对话框,直接按回车的话显示选中表达式的值,还能在输入框中 ...

  9. Visual Studio2019安装步骤

    学校使用的版本是2012版本,而现在讲的版本是2019版本,差别不大,个人认为2019更能胜任学习任务. 另外VS2019是完全免费的,版本越高越好了!毕竟C++都出了C++20对吧. Step 1: ...

  10. Tkinter 之Frame标签

    一.参数说明 语法 作用 width 设置 Frame 的宽度默认值是 0 height 设置 Frame 的高度默认值是 0 background(bg) 设置 Frame 组件的背景颜色 bord ...