1.一个不错的可逆加密算法XXTEA

之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源。所以花了点时间来看了下XXTEA。

一般有两种加密算法:1.像md5,SHA1,等hash算法,是不可逆的。一般数据库存的用户名和密码就用这个。

2.本文所提到的XXTEA算法,是可逆的,有个key可以加密。

安全方面的东西还蛮多的,说到key,还有什么public key, private key,我都还给老师了。忘光了。

可逆加密算法的需求还是比较广的,像加密游戏存档(发现还是无法防止内存修改),加密日志,加密图片等。

可逆加密算法我的要求比较简单:

1.足够安全,2.速度快,3.跨语言

2.XXTEA代码

 #include <stdint.h>#define DELTA 0x9e3779b9#define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))void btea(uint32_t *v, int n, uint32_t const key[4]) {uint32_t y, z, sum;unsigned p, rounds, e;if (n > 1) {          /* Coding Part */rounds = 6 + 52/n;sum = 0;z = v[n-1];do {sum += DELTA;e = (sum >> 2) & 3;for (p=0; p<n-1; p++) {y = v[p+1]; z = v[p] += MX;}y = v[0];z = v[n-1] += MX;} while (--rounds);} else if (n < -1) {  /* Decoding Part */n = -n;rounds = 6 + 52/n;sum = rounds*DELTA;y = v[0];do {e = (sum >> 2) & 3;for (p=n-1; p>0; p--) {z = v[p-1];y = v[p] -= MX;}z = v[n-1];y = v[0] -= MX;} while ((sum -= DELTA) != 0);}}

这个是wiki上抄的代码,可以看出代码非常简短,加密和解密合起来都只有这么点。

对C语言还真是不熟悉,网上找了个C++和C#的代码,发现写的还不错。可以对任意字符串(包括中文),用字符串作为key加密。结果是经过base64变成了简单的字符串,这样可以比较方便处理。

int _tmain(int argc, _TCHAR* argv[])
{string painText = "hello world 啊";char * temp =(char *) painText.c_str();string key = "1234567890abcdef";//秘钥cout<< "pain text:"<<painText<<endl;string result = xxtea_encrypt(painText,key);//加密cout<<"encrypt result:" <<result<<endl;string result_1 = xxtea_decrypt(result,key);//解密cout<< "decrypt result:" <<result_1<<endl;system("pause");return 0;
}

尝试去找了下java版本,不知道为什么不兼容,以后再看。

3.下载地址

资源是 http://my.csdn.net/jxjgssylsg 那下载的。

http://www.waitingfy.com/?attachment_id=1159

参考:

XXTEA 可逆加密解密算法

XXTEA 加密算法 C++ C#兼容版本相关推荐

  1. 【Android FFMPEG 开发】Android Studio 中 配置 FFMPEG 库最小兼容版本 ( undefined reference to 'atof' )

    文章目录 FFMPEG 最小兼容版本 注意事项 FFMPEG 最小兼容版本 注意事项 1 . 最小兼容版本 : 在 Ubuntu 中编译 FFMPEG 时 , 需要指定头文件 与 NDK 的依赖库 , ...

  2. Selenium Chrome浏览器版本与chromedriver驱动兼容版本对照表

    在使用selenium启动谷歌Chrome浏览器的时候,是需要用到chromedirver的,两者之间的版本是需要匹配的,否则会出现下面类似的报错: Only local connections ar ...

  3. python实现tea/xtea/xxtea加密算法

    tea/xtea/xxtea加密算法 概述 tea xtea xxtea 总结 概述   这里记录一下采用python实现三种加密算法的方式,话不多说,直接上代码. tea from ctypes i ...

  4. Selenium Chrome版本与chromedriver兼容版本对照表

    在使用selenium启动谷歌Chrome浏览器的时候,是需要用到chromedirver的,两者之间的版本是需要匹配的,否则会出现下面类似的报错: Exception in thread " ...

  5. 网站变灰CSS,多浏览器兼容版本

    网站变灰CSS,多浏览器兼容版本: <style> body *{ -webkit-filter: grayscale(100%); /* webkit */ -moz-filter: g ...

  6. 介绍XXTEA加密算法

    TEA算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明,TEA是Tiny Encryption Algorithm的缩写,以加密解密速度快,实现简单 ...

  7. javafx 打开新窗口_新的JMetro JavaFX 11兼容版本

    javafx 打开新窗口 你好,我们又见面了! 这次,新版本与JavaFX 11兼容. 继续阅读以获取详细信息. JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支. mast ...

  8. 新的JMetro JavaFX 11兼容版本

    你好,我们又见面了! 这次是一个新版本,该版本与JavaFX 11兼容. 继续阅读以获取详细信息. JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支. master分支具有J ...

  9. javafx 教程_新的JMetro JavaFX 11兼容版本

    javafx 教程 你好,我们又见面了! 这次,是一个新版本,该版本与JavaFX 11兼容. 继续阅读以获取详细信息. JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支. ...

最新文章

  1. SAP QM初阶之物料主数据QM视图里的Preferred Inpspection Type
  2. JUnit 5 – 早期试用体验 – 第2篇
  3. word2vec原理(二):基于Hierarchical Softmax的模型
  4. H.264 视频的 RTP 载荷格式
  5. mysql 字符串 底层_Mysql 的索引底层原理及数据结构详解
  6. PyTorch 1.0 中文文档:序列化的相关语义
  7. JS中的Map和Set实现映射对象
  8. 晚上运动对身体好吗?
  9. 视频转换器如何将视频MKV转换成MP4格式
  10. 常见物联网操作系统介绍
  11. Thinkphp6.0博客源码分享【Wofl-blog】
  12. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
  13. 零基础搭建Win系统Anaconda+Pytorch+OpenCV深度学习环境(Win10、Win11、RTX 3090显卡也适用)
  14. matlab图像处理二,图像缩放、旋转、修剪
  15. Grbl开源固件的官方介绍使用说明【翻译】
  16. 除了Sublime Text ,还有啥笔记应用能double代码效率?
  17. 读余光中散文,看到一句诗(In me the tiger sniffs the rose),感觉很经典,摘录如下
  18. 电梯模型c语言程序,自己制作的简易的 基于51单片机的自动升降电梯简易模型 与大家分享...
  19. android mtk6592 禁止拖动主界面图标
  20. 面具星球推荐:3个超级实用的免费网盘搜索网站,只有你想不到没有它搜不到的

热门文章

  1. Grafana Links
  2. jquery-3.5.1.js net::ERR_ABORTED 404
  3. UPC——2020年春混合个人训练第二十四场(DEFG)
  4. 功利,是一种思维模式
  5. 【STM32】基于正点原子『探索者』开发板的烧录
  6. ES6-ES11新特性速查手册
  7. chrome浏览器内存_如何在Google Chrome浏览器中清除内存
  8. Could not set property 'xxxxxx' of 'xxxxxx' with value 'xxxxx'
  9. Idea Lambda expressions are not supported at language level '5'
  10. 使用raw input 代替全局键盘钩子