MFC BASE64加解密 算法
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加解密 算法的更多相关文章
- base64加/解密算法C++实现
base64编码原理:维基百科 - Base64 其实编码规则很简单,将字符串按每三个字符组成一组,因为每个字符的 ascii 码对应 0~127 之间(显然,不考虑其他字符集编码),即每个字符的二进 ...
- java base64加解密
接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...
- 3des加解密算法
编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...
- QQ协议的TEA加解密算法
QQ通讯协议里的加解密算法. #include <stdio.h> #include <stdlib.h> #include <memory.h> #include ...
- DES加解密算法Qt实现
算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...
- AES加解密算法Qt实现
[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...
- C#加解密算法
先附上源码 加密解密算法目前已经应用到我们生活中的各个方面 加密用于达到以下目的: 保密性:帮助保护用户的标识或数据不被读取. 数据完整性:帮助保护数据不被更改. 身份验证:确保数据发自特定的一方. ...
- AES加解密算法在Android中的应用及Android4.2以上版本调用问题
from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...
- [转]RSA,DSA等加解密算法介绍
From : http://blog.sina.com.cn/s/blog_a9303fd90101cgw4.html 1) MD5/SHA MessageDigest是一个数据的数字指纹. ...
随机推荐
- MLP多层感知机
@author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 转载:http://blog.csdn.net ...
- 文件操作中file.seek()方法
摘要: file.seek()可以将文件游标移动到文件的任意位置,本文具体的file.seek()文件游标移动操作方法. file.seek()方法标准格式是:seek(offset,whence=0 ...
- TCP服务端实现并发
socket 在 tcp 协议下通信 客户端 import socket # 创建客户端TCP协议通信 c = socket.socket() # 与指定服务端握手 c.connect(('127 ...
- python - Flask 上下文管理 流程
上下文管理: - 请求上下文 (ctx=RequestContext()) : request/session - App上下文 (app_ctx=AppContext()) : a ...
- 微信小程序学习记录(一)
如何定义一个全局变量: 1,在根目录下app.js中添加 App({ globalData: { g_isPlayingMusic : false, g_currentMusicPostId :nul ...
- SQL:分区拾忆
1.文件组与文件 数据库属性——可以先添加多个文件组(抽象分割) 单个文件组可以有多文件(物理上的分割),可以添加文件然后指定文件组 例如: 2.分区函数 语法: CREATE PARTITION F ...
- P2037 电话号码
题目描述 一串由长长的数字组成的电话号码通常很难记忆.为了方便记忆,有种方法是用单词来方便记忆.例如用“Three Tens”来记忆电话3-10-10-10. 电话号码的标准形式是七位数字,中间用连字 ...
- 前端逼死强迫症之DOM
Dom:document.相当于把所有的html文件,转换成了文档对象. 之前说过:html-裸体的人:css-穿上衣服:js-让人动起来. 让人动起来,就得先找到他,再修改它内容或属性. 找到标签 ...
- JavaScript--自定义事件Event
在开发过程中,js原生事件不足以满意开发需求,需要开发者自定义事件. 一.Event Event()构造函数创建一个新的Event. event = new Event(typeArg,eventIn ...
- JSP 9大内置对象以及作用
1.HttpServletRequest的 request对象作用:代表请求对象,用来接收客户端通过http协议连接传输到服务器端的数据. 2.HttpServletResponse的response ...