使用字符映射完成简单的对称加密
最近做了点东西,为了防止能够被简单的逆向破解通讯协议,所以需要进行简单的加密操作。于是实现了一个简单的字符映射的对称加密。
首先先说一下实现原理吧,其实原理很简单,对每byte数据进行重新映射,比如明文1映射到9,那么解密的时候9对应的就是1。原理并不复杂。但是由于需要完成1对1 的映射,不能出现1映射到了9,同时2也映射到了9,那么将无法完成解密。由于每byte是8 bit,那么需要的映射表就是256个u8。我们要做的就是把0到255打乱顺序,从而完成映射。说到这里已经很明了了,那就是这个加密表的求取就是把0到255乱序的过程。乱序种子我们可以用伪随机数求取的随机种子来承担。
下面开始贴代码:
int key_buff[256];
int lock_buff[256];
int i=0,loc,temp;
for(i=0;i<256;i++) //生成顺序表
lock_buff[i]=i;
先声明两个buff用来存储加密和解密表,实际上映射表只有一个,但是为了运算速度更快,我们选用两个表。然后把其中一个表初始化为顺序表。
srand((unsigned)time(NULL)); //生成随机种子
for(i=0;i<255;i++) //生成加密表
{loc=rand()%(255-i);temp=lock_buff[255-i];lock_buff[255-i]=lock_buff[loc];lock_buff[loc]=temp;
}
这个就是核心了,生成乱序表,原理很简单,很容易看明白。
for(i=0;i<256;i++) //生成解密表
{loc=0;while(lock_buff[loc]!=i)loc++;key_buff[i]=loc;
}
下面生成解密表。这个为了更快的解密。
int test[10]={1,4,6,34,67,93,45,12,5,35};
int buff[10];for(i=0;i<10;i++)cout<<test[i]<<",";
cout<<"原文"<<endl;
for(i=0;i<10;i++)buff[i]=lock_buff[test[i]];
for(i=0;i<10;i++)cout<<buff[i]<<",";
cout<<"密文"<<endl;
for(i=0;i<10;i++)test[i]=key_buff[buff[i]];
for(i=0;i<10;i++)cout<<test[i]<<",";
cout<<"解密"<<endl;
做一个简单的加解密演示。加密解密都是一次数组寻址,速度很快。
这是两次加密的结果,可以看到对应的密文是不同的。
用这种简单的字符映射来实现加密,只能实现简单的加密,但是已经足够做到一定程度的防止破解的作用。而且对于某些应用来说,随机性的密码表同样是防止破解的手段,比如每台设备的密码表不同,定时更新密码表等,这样就增大了破解的难度。在此仅实现最简单的加密,满足需求即可。
使用字符映射完成简单的对称加密相关推荐
- 使用WinCrypt进行简单的对称加密实例
微软在wincrypt.h中定义了大量的加解密算法的API,方便了软件加解密的实现,可以使我们不必关注密码学的算法,就可以实现高效率的软件加密.下面通过一个类,对API实现简单的封装.详细代码如下: ...
- php 实现对称加密算法,PHP实现简单的对称加密和解密方法
/** * 通用加密 * @param String $string 需要加密的字串 * @param String $skey 加密EKY * @return String */ function ...
- php对称字符串,PHP实现简单的对称加密和解密方法 - str_split
...获取指定值自定义函数代码 Oracle CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split CREATE O ...
- 图解HTTPS非/对称加密,CA证书流程
目录 1.HTTPS是什么 2."加密"是什么 3.HTTPS工作过程 1.引入对称加密 2.引入非对称加密 3.引入证书 4.完整流程 4.总结 1.HTTPS是什么 HTTPS ...
- 对称加密(4) NET对称加密实践
对称加密(4) NET对称加密实践 在使用.NET框架提供的加密算法实现类来执行加密任务时,需要准备加密密钥和初始化向量(Initialization Vector,IV).基于对称加密的特点,在加密 ...
- python对称加密_【Python】 基于秘钥的对称加密
[Crypto] 关于用python进行信息的加密,类似的解决方案有很多比如用base64编码进行encode,再或者是hashlib来进行hash.但是还缺少一种明明场景很简单的解决方案,就是把利用 ...
- HTTPS(对称加密+非对称加密+证书)
目录 1. 加密和解密 HTTPS工作过程 2. 对称加密 3. 对称加密 4. 既然都有非对称加密了,那为啥还要有对称加密 5. 中间人攻击 6. 引入证书 HTTPS 也是一个应用层协议. 是在 ...
- 对称加密与非对称加密的区别
简单说对称加密就是加密与解密时使用的密码相同,如下图: 如加密时使用的是密码"123",那对方解密时也是使用"123"进行解密 存在安全隐患 非对称加密如下图: ...
- php rc4对称加密函数,PHP实现的简单对称加密与解密方法实例小结
本文实例讲述了PHP实现的简单对称加密与解密方法.分享给大家供大家参考,具体如下: 方法一:YII自带的加密方法 /** * 加密 * @var string [要加密的值] */ $secretKe ...
最新文章
- .net framework 注册到IIS上
- 岩板铺地好吗_威廉顿岩板1200x2700x9mm,上墙铺地非常好看大气
- python编程快速上手-----让繁琐工作自动化_每周一书《Python编程快速上手 让繁琐工作自动化》分享!...
- 安装win7根证书_最详细图解Windows7x64更新安装教程
- php 生成小程序二维码
- 全面解析 Netflix 的微服务架构设计
- elif else if oracle_关于Oracle if elsif else
- ICDAR 2019 论文下载
- Java 继承——2
- 使用gdb调试当前运行的程序
- [Web 前端] Jquery 复制元素,并修改属性, 追加到另一个元素后面
- ZooKeeper 客户端: GUI+命令行两大类(史上最全,值得收藏)
- 啦啦外卖独立版40.4最新外卖源码全开源
- 前置加加与后置加加的区别
- 易基因 | 表观技术:单细胞及微量细胞全基因组重亚硫酸盐甲基化测序(scWGBS)
- linux系统mysql密码忘记了怎么办_Linux中MySQL密码忘了怎么办
- 钉钉ppt放映显示备注_PPT的备注怎么用,放映PPT时如何显示备注 来看看吧
- oracle分析函数用途,深入探讨:oracle中row_number() over()分析函数用法
- 企业级别应用--GFS分布式文件系统(GlusterFS工作原理、弹性 HASH 算法 、GlusterFS卷的类型、 部署GlusterFS)
- P2P关卡——资金存管与资金托管