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. POJ-2115-C Looooops(线性同余方程)

    链接: https://vjudge.net/problem/POJ-2115 题意: A Compiler Mystery: We are given a C-language style for ...

  2. docker学习(五)

    一.实战案例介绍一些典型的应用场景和案例. 1.使用Supervisor来管理进程Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常 ...

  3. SpringBoot项目中,Redis的初次使用

    1.引入Redis依赖包,在application.yml中配置redis <dependency> <groupId>org.springframework.boot< ...

  4. Educational Codeforces Round 60 D. Magic Gems

    易得递推式为f[i]=f[i-1]+f[i-M] 最终答案即为f[N]. 由于N很大,用矩阵快速幂求解. code: #include<bits/stdc++.h> using names ...

  5. (WAWAWAWAWAWA) BZOJ 1858: [Scoi2010]序列操作

    二次联通门 : BZOJ 1858: [Scoi2010]序列操作 /* BZOJ 1858: [Scoi2010]序列操作 已经... 没有什么好怕的的了... 16K的代码... 调个MMP啊.. ...

  6. NodeJS后台

    NodeJS后台 后台: 1.PHP 2.Java 3.Python 优势 1.性能 2.跟前台JS配合方便 3.NodeJS便于前端学习 https://nodejs.org/en/ 1.切换盘符 ...

  7. OS创建页目录和页

    ;开始创建页目录项(PDE) .create_pde: ; 创建Page Directory Entry mov eax, PAGE_DIR_TABLE_POS ; PAGE_DIR_TABLE_PO ...

  8. visual studio code(vs code) 编译、运行、调试程序(调用g++)

    g++的安装过程忽略,记不清有没有"安装路径不能有空格"这种问题. 网上翻了几个博客,找到的配置文件在g++下都不能运行,遂折腾. 安装vscode与插件 插件为ms-vscode ...

  9. 牛客OI周赛10-提高组:B-Taeyeon的困惑(值域线段树)

    做法 单点加单点删,在值域线段树上直接二分就能求值前\(K\)小的和 Code #include<bits/stdc++.h> typedef long long LL; const LL ...

  10. zabbix (二)安装

    一.centos7源码安装zabbix3.x 1.安装前环境搭建 下载最新的yum源 #wget -P /etc/yum.repos.d http://mirrors.aliyun.com/repo/ ...