最近做了点东西,为了防止能够被简单的逆向破解通讯协议,所以需要进行简单的加密操作。于是实现了一个简单的字符映射的对称加密。

首先先说一下实现原理吧,其实原理很简单,对每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;

做一个简单的加解密演示。加密解密都是一次数组寻址,速度很快。

这是两次加密的结果,可以看到对应的密文是不同的。
用这种简单的字符映射来实现加密,只能实现简单的加密,但是已经足够做到一定程度的防止破解的作用。而且对于某些应用来说,随机性的密码表同样是防止破解的手段,比如每台设备的密码表不同,定时更新密码表等,这样就增大了破解的难度。在此仅实现最简单的加密,满足需求即可。

使用字符映射完成简单的对称加密相关推荐

  1. 使用WinCrypt进行简单的对称加密实例

    微软在wincrypt.h中定义了大量的加解密算法的API,方便了软件加解密的实现,可以使我们不必关注密码学的算法,就可以实现高效率的软件加密.下面通过一个类,对API实现简单的封装.详细代码如下: ...

  2. php 实现对称加密算法,PHP实现简单的对称加密和解密方法

    /** * 通用加密 * @param String $string 需要加密的字串 * @param String $skey 加密EKY * @return String */ function ...

  3. php对称字符串,PHP实现简单的对称加密和解密方法 - str_split

    ...获取指定值自定义函数代码 Oracle CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split CREATE O ...

  4. 图解HTTPS非/对称加密,CA证书流程

    目录 1.HTTPS是什么 2."加密"是什么 3.HTTPS工作过程 1.引入对称加密 2.引入非对称加密 3.引入证书 4.完整流程 4.总结 1.HTTPS是什么 HTTPS ...

  5. 对称加密(4) NET对称加密实践

    对称加密(4) NET对称加密实践 在使用.NET框架提供的加密算法实现类来执行加密任务时,需要准备加密密钥和初始化向量(Initialization Vector,IV).基于对称加密的特点,在加密 ...

  6. python对称加密_【Python】 基于秘钥的对称加密

    [Crypto] 关于用python进行信息的加密,类似的解决方案有很多比如用base64编码进行encode,再或者是hashlib来进行hash.但是还缺少一种明明场景很简单的解决方案,就是把利用 ...

  7. HTTPS(对称加密+非对称加密+证书)

    目录 1. 加密和解密 HTTPS工作过程 2. 对称加密 3. 对称加密 4. 既然都有非对称加密了,那为啥还要有对称加密 5. 中间人攻击 6. 引入证书 HTTPS 也是一个应用层协议. 是在 ...

  8. 对称加密与非对称加密的区别

    简单说对称加密就是加密与解密时使用的密码相同,如下图: 如加密时使用的是密码"123",那对方解密时也是使用"123"进行解密 存在安全隐患 非对称加密如下图: ...

  9. php rc4对称加密函数,PHP实现的简单对称加密与解密方法实例小结

    本文实例讲述了PHP实现的简单对称加密与解密方法.分享给大家供大家参考,具体如下: 方法一:YII自带的加密方法 /** * 加密 * @var string [要加密的值] */ $secretKe ...

最新文章

  1. .net framework 注册到IIS上
  2. 岩板铺地好吗_威廉顿岩板1200x2700x9mm,上墙铺地非常好看大气
  3. python编程快速上手-----让繁琐工作自动化_每周一书《Python编程快速上手 让繁琐工作自动化》分享!...
  4. 安装win7根证书_最详细图解Windows7x64更新安装教程
  5. php 生成小程序二维码
  6. 全面解析 Netflix 的微服务架构设计
  7. elif else if oracle_关于Oracle if elsif else
  8. ICDAR 2019 论文下载
  9. Java 继承——2
  10. 使用gdb调试当前运行的程序
  11. [Web 前端] Jquery 复制元素,并修改属性, 追加到另一个元素后面
  12. ZooKeeper 客户端: GUI+命令行两大类(史上最全,值得收藏)
  13. 啦啦外卖独立版40.4最新外卖源码全开源
  14. 前置加加与后置加加的区别
  15. 易基因 | 表观技术:单细胞及微量细胞全基因组重亚硫酸盐甲基化测序(scWGBS)
  16. linux系统mysql密码忘记了怎么办_Linux中MySQL密码忘了怎么办
  17. 钉钉ppt放映显示备注_PPT的备注怎么用,放映PPT时如何显示备注 来看看吧
  18. oracle分析函数用途,深入探讨:oracle中row_number() over()分析函数用法
  19. 企业级别应用--GFS分布式文件系统(GlusterFS工作原理、弹性 HASH 算法 、GlusterFS卷的类型、 部署GlusterFS)
  20. P2P关卡——资金存管与资金托管

热门文章

  1. css水平垂直居几种方式总结
  2. win10系统 如何设置定时开关机?
  3. Python 外星人入侵(一):武装飞船
  4. cmdb自动发现mysql_干货 | EasyOps 的CMDB主机自动发现方案
  5. 直销系统开发|直销双轨制模式详解
  6. 计算机 总线带宽计算,电脑各种硬件带宽的计算
  7. Android--智能图像识别(基于百度智能云)
  8. 网站服务器欠费,网络连接正常,显示DNS不可用是否欠费?
  9. http工作中常见的状态码
  10. [论文笔记]CAB:CAching in Buckets CAB-ACME