1. unsigned char * base64 = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  2.  
  3. CString ToolFiles::base64encode(CString src, int srclen)
  4. {
  5. int n, buflen, i, j;
  6. static unsigned char *dst;
  7. CString buf = src;
  8. buflen = n = srclen;
  9. dst = (unsigned char*)malloc(buflen / * + );
  10. memset(dst, , buflen / * + );
  11. for (i = , j = ; i <= buflen - ; i += , j += ) {
  12. dst[j] = (buf[i] & 0xFC) >> ;
  13. dst[j + ] = ((buf[i] & 0x03) << ) + ((buf[i + ] & 0xF0) >> );
  14. dst[j + ] = ((buf[i + ] & 0x0F) << ) + ((buf[i + ] & 0xC0) >> );
  15. dst[j + ] = buf[i + ] & 0x3F;
  16. }
  17. if (n % == ) {
  18. dst[j] = (buf[i] & 0xFC) >> ;
  19. dst[j + ] = ((buf[i] & 0x03) << );
  20. dst[j + ] = ;
  21. dst[j + ] = ;
  22. j += ;
  23. }
  24. else if (n % == ) {
  25. dst[j] = (buf[i] & 0xFC) >> ;
  26. dst[j + ] = ((buf[i] & 0x03) << ) + ((buf[i + ] & 0xF0) >> );
  27. dst[j + ] = ((buf[i + ] & 0x0F) << );
  28. dst[j + ] = ;
  29. j += ;
  30. }
  31. for (i = ; i < j; i++)
  32. dst[i] = base64[(int)dst[i]];
  33. dst[j] = ;
  34. return CString(dst);
  35. }
  36.  
  37. CString ToolFiles::base64decode(CString inpt, int * len)
  38. {
  39. int n, i, j, pad;
  40. unsigned char *p;
  41. static unsigned char *dst;
  42. unsigned char * src;
  43. *len = ;
  44. pad = ;
  45. n = inpt.GetLength();
  46. src = new unsigned char[n];
  47. for (i = ; i < n; i++)
  48. src[i] = inpt[i];
  49.  
  50. while (n> && src[n - ] == '=') {
  51. src[n - ] = ;
  52. pad++;
  53. n--;
  54. }
  55. for (i = ; i < n; i++) {
  56. p = (unsigned char *)strchr((const char *)base64, (int)src[i]);
  57. if (!p)
  58. break;
  59. src[i] = p - (unsigned char *)base64;
  60. }
  61.  
  62. dst = (unsigned char *)malloc(n * / + );
  63. memset(dst, , n * / + );
  64. for (i = , j = ; i < n; i += , j += ) {
  65. dst[j] = (src[i] << ) + ((src[i + ] & 0x30) >> );
  66. dst[j + ] = ((src[i + ] & 0x0F) << ) + ((src[i + ] & 0x3C) >> );
  67. dst[j + ] = ((src[i + ] & 0x03) << ) + src[i + ];
  68. *len += ;
  69. }
  70. *len -= pad;
  71. return CString(dst);
  72. }

有问题 加我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. 如何在vscode中用standard style 风格去验证 vue文件

    1 JavaScript Standard Style简介 本工具通过以下三种方式为你(及你的团队)节省大量时间: 无须配置. 史上最便捷的统一代码风格的方式,轻松拥有. 自动代码格式化. 只需运行 ...

  2. emit传多个参数

    https://blog.csdn.net/lxy123456780/article/details/87811113 子组件: this.$emit('closeChange',false,true ...

  3. vue computed、filters 用法笔记

    computed 在使用时的效果是属性,不是函数. 其次,computed 的值是“智能”响应的,依赖必须都是这个实例自己的东西,如果某个计算需要依赖传入的值,则推荐使用 methods. filte ...

  4. 记录从裸机到TensorFlow GPU版运行 的配置过程

    实验室原来有一台装Ubuntu Server系统的服务器,安装有tensorflow,在使用过程中经常出现断网.死机.自动关机等毛病,忍无可忍,决定重装系统 配置如下:Dell工作站,Xeon-E5 ...

  5. HTML 001 入门介绍

    HTML 教程- (HTML5 标准) 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. 您可以使用 HTML 来建立自己的 ...

  6. 提高 github.com 项目下载速度

    1 注册一个 github.com 账号 2 进入你感兴趣的项目 3 Fork  一个副本到你的账号之下 4 git clone https://github.com/your-name/fork-p ...

  7. Laravel 6.0 Schedule Preventing Task Overlaps 测试

    1 目的 1.1 测试 Laravel 6.0 任务执行机制 2 意义 2.1 在日常开发中,有的任务比较复杂,在两次任务的调度周期间隔中无法完成. 2.2 为了防止重复任务的持续生成和反复调用,对服 ...

  8. 009_Python3 元组

    Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可.   实例1: >>> ...

  9. 003_Python3 基本数据类型

    1.Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存 ...

  10. javaweb+上传大文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...