没什么好说的,简单无脑!

#include<iostream>
using namespace std;

int ECB()
{
int duan[4];
int messageLen = 16; //需要加密数据的长度
int encLen = 4; //加密分段的长度
int key[4] = {1,0,1,0}; // ECB OFB CFB CTR 初始密码 CBC IV
// CTR 计数器从0开始,每组二进制加1,大小 4*sizeof(int)
int initVec[8] = {0,1,1,0,1,0,0,1};
int message[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文
int a;
a = messageLen/encLen;
int b=0;
int c=0;
for(int i=1;i<=a;i++)
{
for(int j=0;j<4;j++)
{
c=b+j;
duan[j]=message[c];
if(duan[j]==key[j])
{
duan[j]=0;
}
else
{
duan[j]=1;
}
ciphertext[c]=duan[j];
}
b=b+encLen;
}
for(int w=0;w<messageLen;w++)
{
cout<<ciphertext[w];
cout<<" ";
if(w%4==3)
cout<<endl;
}
return 0;
}

int CBC()
{
int duanchu[4];
int duan[4];
int messageLen = 16; //需要加密数据的长度
int encLen = 4; //加密分段的长度
int key[4] = {1,0,1,0}; // ECB OFB CFB CTR 初始密码 CBC IV
// CTR 计数器从0开始,每组二进制加1,大小 4*sizeof(int)
int initVec[8] = {0,1,1,0,1,0,0,1};
int message[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文
int a;
a = messageLen/encLen;
int b=0;
int c=0;
for(int o=0;o<4;o++)
{
duanchu[o]=message[o];
}
for(int i=1;i<=a;i++)
{
for(int j=0;j<4;j++)
{
c=b+j;
duan[j]=message[c];
if(duan[j]==duanchu[j])
{
duan[j]=0;
}
else
{
duan[j]=1;
}
if(duan[j]==key[j])
{
duan[j]=0;
}
else
{
duan[j]=1;
}
ciphertext[c]=duan[j];
}
b=b+encLen;
}
for(int w=0;w<messageLen;w++)
{
cout<<ciphertext[w];
cout<<" ";
if(w%4==3)
cout<<endl;
}
return 0;
}

int OFB()
{
int xiangliang[4]={1,0,1,0};
int duan[4];
int messageLen = 16; //需要加密数据的长度
int encLen = 4; //加密分段的长度
int key[4] = {1,0,1,0}; // ECB OFB CFB CTR 初始密码 CBC IV
// CTR 计数器从0开始,每组二进制加1,大小 4*sizeof(int)
int initVec[8] = {0,1,1,0,1,0,0,1};
int message[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文
int a;
a = messageLen/encLen;
int b=0;
int c=0;
for(int i=1;i<=a;i++)
{
for(int j=0;j<4;j++)
{
c=b+j;
duan[j]=message[c];
if(xiangliang[j]==key[j])
{
xiangliang[j]=0;
}
else
{
xiangliang[j]=1;
}
if(duan[j]==xiangliang[j])
{
duan[j]=0;
}
else
{
duan[j]=1;
}
ciphertext[c]=duan[j];
}
b=b+encLen;
}
for(int w=0;w<messageLen;w++)
{
cout<<ciphertext[w];
cout<<" ";
if(w%4==3)
cout<<endl;
}
return 0;
}

int CFB()
{
int xiangli[6];
int xiangliang[6]={1,0,1,0,0,0};
int duan[4];
int messageLen = 16; //需要加密数据的长度
int encLen = 4; //加密分段的长度
int key[4] = {1,0,1,0}; // ECB OFB CFB CTR 初始密码 CBC IV
// CTR 计数器从0开始,每组二进制加1,大小 4*sizeof(int)
int initVec[8] = {0,1,1,0,1,0,0,1};
int message[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文
int a;
a = messageLen/encLen;
int b=0;
int c=0;
for(int i=1;i<=a;i++)
{
for(int j=0;j<4;j++)
{
c=b+j;
duan[j]=message[c];
if(xiangliang[j]==key[j])
{
xiangli[j]=0;
}
else
{
xiangli[j]=1;
}
if(duan[j]==xiangli[j])
{
duan[j]=0;
}
else
{
duan[j]=1;
}

ciphertext[c]=duan[j];
}
for(int w=0;w<6;w++)
{
if(w<=1)
{
xiangliang[w]=xiangliang[w+4];
}
else
{
xiangliang[w]=duan[w-2];
}
}
b=b+encLen;
}
for(int w=0;w<messageLen;w++)
{
cout<<ciphertext[w];
cout<<" ";
if(w%4==3)
cout<<endl;
}
return 0;
}

int CTR()
{
int shuchuduan[4];
int couter[4]={0};
int duan[4];
int messageLen = 16; //需要加密数据的长度
int encLen = 4; //加密分段的长度
int key[4] = {1,0,1,0}; // ECB OFB CFB CTR 初始密码 CBC IV
// CTR 计数器从0开始,每组二进制加1,大小 4*sizeof(int)
int initVec[8] = {0,1,1,0,1,0,0,1};
int message[16] = {1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0}; //明文
int ciphertext[16]; //密文
int a;
a = messageLen/encLen;
int b=0;
int c=0;
for(int i=1;i<=a;i++)
{
for(int j=0;j<4;j++)
{
c=b+j;
duan[j]=message[c];
if(couter[j]==key[j])
{
shuchuduan[j]=0;
}
else
{
shuchuduan[j]=1;
}
if(duan[j]==shuchuduan[j])
{
duan[j]=0;
}
else
{
duan[j]=1;
}
ciphertext[c]=duan[j];
}
b=b+encLen;
for(int s=3;s>=0;s--)
{
if(couter[s]==0)
{
couter[s]=1;
if(s<3)
{
for(int r=3;r>s;r--)
{
couter[r]=0;
}
}
break;
}
}
}
for(int w=0;w<messageLen;w++)
{
cout<<ciphertext[w];
cout<<" ";
if(w%4==3)
cout<<endl;
}
return 0;
}

int main()
{
// show init message
cout<<"ECB"<<endl;
ECB();
cout<<"CBC"<<endl;
CBC();
cout<<"CTR"<<endl;
CTR();
cout<<"CFB"<<endl;
CFB();
cout<<"OFB"<<endl;
OFB();
return 0;
}

实现五种分组加密模式ECB,CBC,CFB,OFB,CTR的更多相关文章

  1. DES加密算法应用:分组加密模式

    通常,大多数的分组加密算法都是把数据按照64位分组的方式进行加密和解密.但是几乎所有的加密工作所涉及的数据量都远远大于64位,因此就需要不断地重复加密过程,直到处理完所有的分组.这种分组加密中所涉及的 ...

  2. 五种I/O 模式,select、epoll方法的理解,BIO、NIO、AIO理解 相关文章

    一.io方式 Linux网络编程 五种I/O 模式及select.epoll方法的理解 web优化必须了解的原理之I/o的五种模型和web的三种工作模式 五种I/O 模式——阻塞(默认IO模式),非阻 ...

  3. 五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O

    五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O 五种I/O 模式:[1]        阻塞 I/O          ...

  4. Linux网络编程学习(十一) ----- 五种I/O模式(第六章)

    1.五种I/O模式是哪几个? 阻塞I/O,非阻塞I/O,I/O多路复用,信号驱动I/O(SIGIO),异步I/O 一般来讲程序进行输入操作有两个步骤,一是等待有数据可读,二是将数据从系统内核中拷贝到程 ...

  5. 开关电源五种PWM反馈控制模式

    开关电源五种PWM反馈控制模式 来源:--作者:--浏览:178时间:2016-08-10 14:18 关键词: 1 引言 PWM开关稳压或稳流电源基本工作原理就是在输入电压变化.内部参数变化.外接负 ...

  6. 转: Linux网络编程 【8】五种I/O 模式

    五种I/O 模式:[1]        阻塞 I/O           (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)[2]        非阻塞 ...

  7. AES五种加密模式(CBC、ECB、CTR、OCF、CFB)

    --转载https://www.cnblogs.com/starwolf/p/3365834.html https://www.freebuf.com/column/171939.html 分组密码有 ...

  8. java架构之路-(设计模式)五种创建型模式之单例模式

    设计模式自身一直不是很了解,但其实我们时刻都在使用这些设计模式的,java有23种设计模式和6大原则. 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可 ...

  9. iOS CommonCrypto 对称加密 AES ecb,cbc

    CommonCrypto 为苹果提供的系统加密接口,支持iOS 和 mac 开发: 不仅限于AES加密,提供的接口还支持其他DES,3DES,RC4,BLOWFISH等算法, 本文章主要讨论AES在i ...

随机推荐

  1. java数组、泛型、集合在多态中的使用及对比

    我们在使用数组,泛型集合的过程中不可避免的会碰到多态,或者说什么情况下能如何使用父数组引用子数组(集合.泛型)呢? 数组在多态中的使用 元素为父类型的数组引用可指向元素为子类型的数组对象 当数组被调用 ...

  2. SQL SERVER 事务日志 解析

    1 基本介绍 每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作. 日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种: 完整模式,完全记录事物日志,需要定期进行 ...

  3. 【openstack N版】——云主机调整大小\冷迁移

    一.先决条件 云主机冷迁移,即:将一台云主机从一个计算节点上,迁移到另外一个计算节点上.因为环境原因,所以我们需要准备两个计算节点. 1.1准备环境 在控制节点上,安装一个计算节点 #在控制节点安装n ...

  4. 【NodeJs】记录一个阿里云redis的坑

    背景 一个风和日丽的下午,一个上线的大好日子,以为一切准备好,上个线也就三五分钟的事.但是... 图样图森破. 背景是这样的,项目需要,在阿里云开通redis,在项目中配好redis的连接字符串后,以 ...

  5. wemall app商城源码Android之支付宝接口公用函数

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之  ...

  6. wemall app商城源码中android按钮的三种响应事件

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码中android按 ...

  7. CoreAnimation 寄宿图

    #CoreAnimation 寄宿图 寄宿图:图层中所包含的图 by:旭宝爱吃鱼 针对于寄宿图我在这里只讨论contents属性以及Custom Drawing. contents content:内 ...

  8. ST Lab1 junit test

    代码地址:  https://github.com/newff/st-lab1 Tasks: Install Junit(4.12), Hamcrest(1.3) with Eclipse Insta ...

  9. c# 将匿名类或者集合转Json格式数据一些方法

    要说写这个功能呢也是因为工作需要,白天呢上班写个Web页面需要ajax请求后台并将数据以Json格式传会前端,由于公司特殊性吧,不能连外网(很苦比).所以只有等到晚上回家上网边查边写! public ...

  10. ubuntu下命令使用

    sudo apt-get -f install:修复函数依赖 df -hl:查看空间使用状况 nvidia-smi:常看GPU使用率