没什么好说的,简单无脑!
#include
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
{
cout<
cout<
if(w%4==3)
cout<
}
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
{
cout<
cout<
if(w%4==3)
cout<
}
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
{
cout<
cout<
if(w%4==3)
cout<
}
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
{
cout<
cout<
if(w%4==3)
cout<
}
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
{
cout<
cout<
if(w%4==3)
cout<
}
return 0;
}
int main()
{
// show init message
cout<
ECB();
cout<
CBC();
cout<
CTR();
cout<
CFB();
cout<
OFB();
return 0;
}
DES加密算法应用:分组加密模式
通常,大多数的分组加密算法都是把数据按照64位分组的方式进行加密和解密.但是几乎所有的加密工作所涉及的数据量都远远大于64位,因此就需要不断地重复加密过程,直到处理完所有的分组.这种分组加密中所涉及的 ...
五种I/O 模式,select、epoll方法的理解,BIO、NIO、AIO理解 相关文章
一.io方式 Linux网络编程 五种I/O 模式及select.epoll方法的理解 web优化必须了解的原理之I/o的五种模型和web的三种工作模式 五种I/O 模式——阻塞(默认IO模式),非阻 ...
Linux网络编程学习(十一) ----- 五种I/O模式(第六章)
1.五种I/O模式是哪几个? 阻塞I/O,非阻塞I/O,I/O多路复用,信号驱动I/O(SIGIO),异步I/O 一般来讲程序进行输入操作有两个步骤,一是等待有数据可读,二是将数据从系统内核中拷贝到程 ...
开关电源五种PWM反馈控制模式
开关电源五种PWM反馈控制模式 来源:--作者:--浏览:178时间:2016-08-10 14:18 关键词: 1 引言 PWM开关稳压或稳流电源基本工作原理就是在输入电压变化.内部参数变化.外接负 ...
转: Linux网络编程 【8】五种I/O 模式
五种I/O 模式:[1] 阻塞 I/O (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)[2] 非阻塞 ...
AES五种加密模式(CBC、ECB、CTR、OCF、CFB)
--转载https://www.cnblogs.com/starwolf/p/3365834.html https://www.freebuf.com/column/171939.html 分组密码有 ...
java架构之路-(设计模式)五种创建型模式之单例模式
设计模式自身一直不是很了解,但其实我们时刻都在使用这些设计模式的,java有23种设计模式和6大原则. 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可 ...
iOS CommonCrypto 对称加密 AES ecb,cbc
CommonCrypto 为苹果提供的系统加密接口,支持iOS 和 mac 开发: 不仅限于AES加密,提供的接口还支持其他DES,3DES,RC4,BLOWFISH等算法, 本文章主要讨论AES在i ...
随机推荐
TODO:数据库优化之分页
TODO:数据库优化之分页 本文的例子是以MongoDB数据库为准,其它数据库各位也可以举一反三进行优化. 在MongoDB中分页使用 a.skip(n)跳过前n个匹配的文档: b.limit(m)返 ...
EXCEL表格实现万位分隔符效果!
单击单元格右键 选择自定义单元格格式 选择数字标签 选择自定义 在输入框中输入:###","#### 单击确定即可! 格式刷可以对其他单元格实行同样效果!
angular的工具方法笔记(equals, HashKey)
分别是angular脏值检测的工具方法equals和 类HashKey的使用方法 /p>
【LeetCode】 Subsets
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...
Es索引优化
https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html https://www.elastic.co/gui ...
算法精解(C语言描述) 第3章 读书笔记
第3章 递归 1.基本递归 假设想计算整数n的阶乘,比如4!=4×3×2×1. 迭代法:循环遍历其中的每一个数,然后与它之前的数相乘作为结果再参与下一次计算.可正式定义为:n! = (n)(n-1)( ...
Linux常见目录及命令介绍
一.Linux中常用的目录介绍: / -根目录 /bin -命令保存目录(普通用户亦可读取的命令) /boot -启动目录,启动相关文件 /d ...
spring里的三大拦截器
Filter 新建 TimeFilter @Component public class TimeFilter implements Filter { @Override public void in ...
【Python基础】zip函数的使用
zip函数的使用 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同, ...
pxc集群进入非主模式怎么让最后的节点允许提供服务
这种情况一般是,集群其他节点意外宕机而最后一个节点无法自我仲裁,而进入非主模式. 该模式拒绝任何SQL的执行: ERROR 1047 (08S01): WSREP has not yet prepar ...