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

#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. angular drag and drop (marceljuenemann) 笔记

    这是原文 http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/simple 看起来很多功能,所以我只记入我需要的部分 ...

  2. perl 之eval

    eval是个表达式,语句末尾有一个分号, 发现在它的监视范围内出现致命错误,会立即停止运行整个块,退出后继续运行其 余的代码   eval的返回值就是语句块最后一条表达式的执行结果   eval非正常 ...

  3. WebSite---前台系统图片验证码心得

    背景: 因为移动端APP和Msite手机注册发送短信验证码没有添加图片验证码功能.公司的短信接口被恶意刷取.所以我们就觉得在移动端添加一个图片验证码功能.分享一下大体实现方式思路.PS demo是自己 ...

  4. WinSCP 中普通用户以 root 身份登录 Linux

    版本说明: Windows 10 CentOS 7 WinSCP 5.7.7 (Build 6257) 问题背景 使用 WinSCP 登录 CentOS 上传文件,使用的是普通用户,且已加入 sudo ...

  5. 《shell脚本学习指南》学习笔记之入门

    为什么要使用shell脚本? shell脚本能够轻易处理文件与目录之类的对象,而且是各UNIX系统之间经过POSIX标准化的通用的功能,因此Shell脚本只要“用心写”一次,即可应用到很多系统上,因此 ...

  6. 浅析=======Struts2之==========valueStack

    今天刚学习了struts2的valueStack,在这里把自己学到的做个分享,说道valueStack就不得不提OGNL表达式=== struts2工作流程 1.OGNL(Object Graph N ...

  7. 3359: [Usaco2004 Jan]矩形

    3359: [Usaco2004 Jan]矩形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 8  Solved: 5[Submit][Status] ...

  8. CoreGraphics--饼状图

    //传入数据,饼状图 pieChartView.dataArr = @[@20,@50,@80,@70,@40]; - (void)drawRect:(CGRect)rect { // Drawing ...

  9. 第一次"正经面试"之发现自己的缺陷和不足

    1:初试之校园招聘~~~ 如果你细心,可能发现了"正经面试"加了双引号,说起这次面试(昨天面的技术试),要从上礼拜六,距今已经一礼拜了吧.现在这个时候校园招聘已经蠢蠢欲动了吧,(说 ...

  10. SQLServer 数据库不能重命名的解决方案

    无法用排他锁锁定该数据库,以执行该操作 SQL Server2008 因为可能其他用户在占用着该数据库 解决办法为 把数据库先改为单用户的,再改数据库名,再改回多用户的 USE [master] GO ...