素材巴巴 > 程序开发 >

Linux c ecb 加密,实现五种分组加密模式ECB,CBC,CFB,OFB,CTR

程序开发 2023-09-11 10:02:31

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

#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;

}

1e77181dac6f8fa2842c0dbfe978983d.png

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 ...


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。