关于加密与安全,廖雪峰网站上有一个系统的介绍

TEA算法

TEA算法在腾讯QQ中大量使用。算法简单,容易实现,但是加密强度并不小,适合在嵌入式系统中使用。
TEA算法(Tiny Encryption Algorithm,小型加密算法)由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。
TEA的结构类似于Feistel 密码结构,Feistel结构中一轮操作的左半部分与F函数输出是进行异或的运算(加解密流程相同);而TEA加密是进行+操作,解密时进行-操作(加解密流程不同)。说TEA是小型加密算法,其实是说其F函数比较简单,不像DES的F函数那么复杂,TEA的F函数只是进行简单的移位、加法、异或等操作,但是这不意味着TEA加密算法不安全。
TEA的一轮结构如下图:

#include <stdio.h>
#include <stdint.h>//加密函数
void encrypt (uint32_t* v, uint32_t* k) {uint32_t v0=v[0], v1=v[1], sum=0, i;           /* set up */uint32_t delta=0x9e3779b9;                     /* a key schedule constant */uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */for (i=0; i < 32; i++) {                       /* basic cycle start */sum += delta;v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);}                                              /* end cycle */v[0]=v0; v[1]=v1;
}
//解密函数
void decrypt (uint32_t* v, uint32_t* k) {uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;  /* set up */uint32_t delta=0x9e3779b9;                     /* a key schedule constant */uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */for (i=0; i<32; i++) {                         /* basic cycle start */v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);sum -= delta;}                                              /* end cycle */v[0]=v0; v[1]=v1;
}int main()
{uint32_t v[2]={1,2},k[4]={2,2,3,4};// v为要加密的数据是两个32位无符号整数// k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位printf("加密前原始数据:%u %u\n",v[0],v[1]);encrypt(v, k);printf("加密后的数据:%u %u\n",v[0],v[1]);decrypt(v, k);printf("解密后的数据:%u %u\n",v[0],v[1]);return 0;
}

该算法中,被加密的数据是两个数字,密钥是4个无符号的32位整数(共128bit)。事实上,被加密的数据也可以是字符串,一个完整的例子如下:
TEA加密算法详解
https://jingyan.baidu.com/article/b2c186c829035dc46ef6ffd7.html

密钥的生成

密钥不能采用固定的密钥值,每个设备的密钥都不一样(每个设备的密钥本身也要是随机值,或者采用某种算法包装的不易被发现规律的值)。这样,即使加密算法被破解也无法破解数据,即使某个设备的密钥被拿到,其它设备的密钥也无法知道,依然无法破解其他设备的数据。
方法一:key = fun(设备ID+设备入网时间)
安全性分析:即使破解了TEA算法,还要再次破解密钥的算法。
方法二:key = fun(设备ID+设备入网时间+随机数)
备注:在设备出厂时自带一个唯一的随机数(不能用设备ID,因为ID有规律可循),入网时将该随机数告诉服务器,服务器将设备的随机数存储下来。(由于入网时间已经带有一定的随机性,可部分替代随机数,无需另外的随机数了)
安全性分析:TEA算法+密钥算法+随机数

fun函数可以使用MD5算法,可以在单片机上实现。
MD5算法特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

TEA加密算法与密钥管理相关推荐

  1. TEA加密算法的C/C++实现

    TEA加密算法的C/C++实现 http://www.xxlinux.com/linux/article/development/soft/20070911/9687.html 时间:2007-09- ...

  2. 解析 TEA 加密算法(C语言、python):

    目录 解析 TEA 加密算法(C语言.python): TEA 加密: XTEA 加密: XXTEA 加密: 解析 TEA 加密算法(C语言.python): TEA系列概述: TEA算法是由剑桥大学 ...

  3. TEA加密算法及JAVA实现

    TEA算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明.它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特.TEA算法利用不断增加的D ...

  4. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)...

    2019独角兽企业重金招聘Python工程师标准>>> 数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊-- ...

  5. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)

    数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们--帕蒂.道格.苏珊--每人一把. 3. 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4 ...

  6. 加密算法 AES MD5 SHA1

    2019独角兽企业重金招聘Python工程师标准>>> 加密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的 ...

  7. 常见加密算法分类,用途,原理以及比较

    摘自:http://blog.csdn.net/zuiyuezhou888/article/details/7557048   密码学简介 据记载,公元前400年,古希腊人发明了置换密码.1881年世 ...

  8. Java实现文件的RSA和DES加密算法

    根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密) 对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密 ...

  9. 转: 常见加密算法分,用途,原理以及比较

    常见加密算法分,用途,原理以及比较 标签: 算法加密解密encryption破解algorithm 2012-05-11 13:28 3533人阅读 评论(0) 收藏 举报  分类: 数据结构与算法( ...

最新文章

  1. ORB_SLAM2源码:ORBmatcher.cc
  2. 解决linux服务器掉包问题
  3. eplan增加其他到工具栏_EPLAN增效之工具栏定制(十三:端子排编辑不进导航器)
  4. Publishing failed with multiple errors和Timeout waiting for Tomcat v5.5的解决方法
  5. win7安装python
  6. 爬空气质量MySQL_爬虫:利用selenium采集某某环境网站的空气质量数据
  7. IOS10.8.2安装
  8. 发现 nios2-elf-gcc 一处 bug
  9. 整洁数据 —tidytext(一)
  10. 五个金念什么_5个火读什么???还有5个水 5个木 5个土 5个金
  11. arduino 有源 蜂鸣器_(二十)arduino入门:蜂鸣器的使用
  12. ctbs mysql_C/C++/Java
  13. T检验与F检验的区别_f检验和t检验的关系
  14. java清除浏览器缓存
  15. 语文数学英语计算机文理科,高考文理科英语试卷一样吗
  16. 论文阅读笔记:An End-to-End Trainable Neural Network Model with Belief Tracking for Task-Oriented Dialog
  17. 微信小程序登录+坐标定位显示km数
  18. 系统服务器Fedora和Red Hat Enterprise Linux实用指南(第6版)(上、下册)( 入行必读的Linux圣经)...
  19. Truelore星桥,为投标全过程保驾护航
  20. QT-三色灯状态灯IO状态

热门文章

  1. 火爆的超级人工智能ChatGPT,唯独鄙视中国人
  2. java中级考试 考点_Java API详解+面试考点
  3. 营收17.9亿元增长5%背后:搜狗的三大支撑与长远价值
  4. 工信部:大力支持5G、大数据等技术创新和产业应用
  5. 三子棋(井字棋)超详细
  6. 部署zabbix服务监控
  7. 怎么压缩图片大小?四招详解
  8. 【代码规范】Web前端开发规范文档!!!
  9. 莫尔斯电码c语言编程教程,翻译莫尔斯电码
  10. 11g dbfs配置