跨平台的加密算法XXTEA 的封装
跨平台的加密算法XXTEA 的封装
XXTEA算法的结构非常简单,只需要执行加法、异或和寄存的硬件即可,且软件实现的代码非常短小,具有可移植性。
维基百科地址:http://en.wikipedia.org/wiki/XXTEA
XXTEA可对连续内存数据进行方便快速的加密解密,且比较安全,但其使用不是很方便,因此有了此次封装。
封装好的接口如下:

//
// XXTEA.h
//
// Created by Yuming on 12-7-24.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
// /*
* 此类是对XXTEA官方算法进行的封装,XXTEA信息详见http://en.wikipedia.org/wiki/XXTEA
*/ #ifndef XXTEA_h
#define XXTEA_h #include "stdlib.h"
#include "stdio.h"
#include <string.h> #ifndef XXTEA_TYPE
#define XXTEA_TYPE int // 一种32位长的数据类型,因int在32bit和64bit系统中都是32位的,故直接用int
#endif class XXTEA {
public:
XXTEA();
~XXTEA(); public:
/**
* @brief 获得输出缓冲区的长度
*
* @param nLength 输入缓冲区长度
* @param isEncode TRUE 即为加密,FALSE即为解密
*
* @return 返回所需长度
*/
static size_t XXTEAGetBufferLength(size_t nLength, bool isEncode); /**
* @brief 对数据流进行加密
*
* @param lpDstBuffer 目标缓冲区
* @param lpSrcBuffer 源缓冲区
* @param nLength 源缓冲区长度
* @param lpKey 密钥
*
* @return 加密是否成功
*/
static bool XXTEAEncode(char* lpDstBuffer, const char* lpSrcBuffer, size_t nLength, const XXTEA_TYPE* lpKey); /**
* @brief 对数据流进行解密
*
* @param lpDstBuffer 目标缓冲区
* @param lpSrcBuffer 源缓冲区
* @param nLength 源缓冲区长度
* @param lpKey 密钥
*
* @return 解密是否成功
*/
static bool XXTEADecode(char* lpDstBuffer, const char* lpSrcBuffer, size_t nLength, const XXTEA_TYPE* lpKey); private:
/**
* @brief XXTEA官方算法,此类即是对其进行封装,详见http://en.wikipedia.org/wiki/XXTEA
*
* @param v 加解密数据流
* @param n 加解密长度,n > 1为加密,n < -1为解密
* @param k 密钥 注意:形式参数k需和MX中的k对应
*
* @return 返回0表示加解密成功,返回1表示失败
*/
static long btea(XXTEA_TYPE* v, long n, const XXTEA_TYPE* k); /**
* @brief 正常字符串以16进制保存
*
* @param surBuffer 源缓冲区
* @param length 源缓冲区长度
* @param dstBuffer 目标缓冲区
*/
static void StringToHex(const char* surBuffer, int length, char* dstBuffer); /**
* @brief 16进制字符串解析成正常字符串
*
* @param surBuffer 源缓冲区
* @param dstBuffer 目标缓冲区
*
* @return 目标缓冲区的长度
*/
static int HexToString(const char* surBuffer, char* dstBuffer);
}; #endif

加密解密示例代码:

char srcBuffer[] = "hello world! 你好!";
size_t length = XXTEA::XXTEAGetBufferLength(strlen(srcBuffer) + 1, true);
char* encodeBuffer = new char[length];
XXTEA_TYPE key[4] = {0x12345678, 0x734a67fc, 0x3367a642, 0x78432562};
XXTEA::XXTEAEncode(encodeBuffer, srcBuffer, strlen(srcBuffer) +1, key);
printf("encodeBuffer: %s\r\n", encodeBuffer);
char* decodeBuffer = new char[XXTEA::XXTEAGetBufferLength(length, false)];
XXTEA::XXTEADecode(decodeBuffer, encodeBuffer, length, key);
printf("decodeBuffer: %s\r\n", decodeBuffer);
delete encodeBuffer;
delete decodeBuffer;

示例结果:

跨平台的加密算法XXTEA 的封装的更多相关文章
- 跨平台的游戏客户端Socket封装,调整
原文链接:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019359.html 头文件: #pragma once #ifdef WIN32 ...
- XXTEA 加密算法 C++ C#兼容版本号
1.一个不错的可逆加密算法XXTEA 之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源.所以花了点时间来看了下XXTEA. 一般有两种加密算法:1.像md5,SHA1,等ha ...
- 分享一个Delphi跨平台Http库的封装,一个Delphi跨平台TCP库的封装
{ 单元名:跨平台的TCP客户端库封装 作者:5bug 网站:http://www.5bug.wang } unit uCPTcpClient; interface uses System.Class ...
- AES加密算法C++实现
我从网上下载了一套AES加密算法的C++实现,代码如下: (1)aes.h #ifndef SRC_UTILS_AES_H #define SRC_UTILS_AES_H class AES { pu ...
- 用C++实现的SDK跨平台心得体会
C/C++的跨平台特性相比于Java更加原生(Java是一次编译到处运行,而C/C ++则需要拿着源码重新编译一遍),实现一个C/C++跨平台程序一般有几点做法: 1.使用Qt 2.使用ANSI C/ ...
- 解耦——Hybrid H5跨平台性思考
跨平台,是HTML5最重要的能力之一.而Hybrid H5因强依赖于具体App,往往不具有跨平台性.这时,将强依赖关系解耦,即可恢复HTML5的跨平台能力.近期我负责手Q红包打赏项目的前端开发,因项目 ...
- 写给开发人员的实用密码学(七)—— 非对称密钥加密算法 RSA/ECC
本文部分内容翻译自 Practical-Cryptography-for-Developers-Book,笔者补充了密码学历史以及 openssl 命令示例,并重写了 RSA/ECC 算法原理.代码示 ...
- ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...
- 【腾讯Bugly干货分享】微信小程序开发思考总结——腾讯“信用卡还款”项目实践
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/58212d0fa7a7574c4f4cc3c5 作者:peggy 小程序概述 1 ...
随机推荐
- extension 的一个应用 - 优化图片的读取机制
枚举和 extension 都是 swift 中非常好用的特性.这里我们就来讨论一个应用的例子,供大家参考. 我们在开发 app 的时候,都会用到各种图片资源,而我们读取图片资源时主要是通过UIIma ...
- Content Template & DataTemplate 区别
转一篇很好的博客: http://www.cnblogs.com/lzhp/p/3250786.html 介绍 listbox 的 Template.ItemsPanel.ItemContainerS ...
- [原]Java修炼 之 基础篇(二)Java语言构成
上次的博文中Java修炼 之 基础篇(一)Java语言特性我们介绍了一下Java语言的几个特性,今天我们介绍一下Java语言的构成. 所谓的Java构成,主要是指Java运行环境的组成, ...
- C++设计模式——工厂方法模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...
- 二叉查找树(BST)
二叉查找树(BST):使用中序遍历可以得到一个有序的序列
- 初学MFC
学习使用MFC搭建界面.尝试使用MFC搭建了一个简单的基于对话框的计算器界面,包括模态对话框.非模态对话框.向导对话框等. // MFCApplicationAddDlg.h : 头文件 // #pr ...
- web项目自动化测试方案预研
一. 网上方案整理 Watir.Watir-Webdriver.Selenium2.QTP区别 Waitr与Watir-WebDriver有什么区别? Watir是非常优秀的一款自动化测试工具.其使 ...
- 【BZOJ】【1863】【ZJOI2006】trouble 皇帝的烦恼
二分+DP Orz KuribohG 神题啊= = 满足单调性是比较显然的…… 然而蒟蒻并不会判断能否满足……QwQ 神一样的DP姿势:f[i]表示第 i 个与第1个最多有多少个相同,g[i]表示最少 ...
- poi过滤操作后产生新的sheet
public Sheet filterSheet(Sheet sheetToFilter){ if(sheetToFilter == null){ System.out.println("s ...
- aspose.cell 自定义模板 SUM无效
数字类型的单元格, 显示 解决方案: 绑定的DataTable的列为字符串类型. 应该将其设置成数字类型的列