1.实验目的

(1)掌握对称加密基本原理、特点;
(2)了解分组密码基本工作模式,了解ECB模式弱点;

2.实验内容

(1)对称加密算法加解密验证;
(2)ECB模式加密验证及分析;

3.实验指导

(1)一次一密模拟验证

A、B两同学一组进行验证:

A:
I. 随意写一段明文(中英文均可)
II. 找一段大段的文字材料,从中选取密钥(长度需大于明文),例如从第三段第20个字符开始作为密钥,加密明文
III. 密文发给B,同时告诉B约定的密钥,如“xxx文章三段20字”

B:解密测试,AB验证结果。
加密过程:

密文: AR8CXZTI4uX/gJGZ8eg=

解密过程:

明文:张俊 201802524

(2)DES加密验证

A、B两同学一组进行验证进行DES对称密码加密验证。
对密文:张俊 201802524 进行加密:

密文:J8CaD/6LdelpDkqBh0Nod8BG2sP/fz9b
对密文解密:

明文:张俊 201802524

(3)ECB模式加密验证

I. 查阅资料,整理出分组密码的基本的工作模式、优缺点,粘贴在下面:
ECB模式:

ECB模式的全称是Electronic CodeBook模式。在ECB模式中,将明文分组加密之后的结果将间接成为密文分组。

运用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,也便是说,我们能够将其理解为是一个巨大的“明文分组——密文分组”的对应表,因而ECB模式也称为电子密码本模式。

ECB模式的优点:简单、快速、支持并行计算(加密、解密)
ECB模式的缺陷:明文中的重复排列会反应在密文中,通过删除、替换密文分组能够对明文进行操作,对包含某些比特错误的密文进行解密时,对应的分组会出错;不可以抵御重放攻击。

CBC模式:

CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之因而叫这个名字,是由于密文分组是像链条一样互相连接在一同的。

在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后在再进行加密。

CBC模式优点:明文的重复排列不会反应在密文中;支持并行计算(仅解密);可以解密随意密文分组。
CBC模式缺陷:对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;加密不支持并行计算。

CFB模式:

CFB模式的全称是Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的便是返回输入端的意思。

CFB模式的优点:不需求填充;支持并行计算(仅解密);可以解密随意密文分组。
CFB模式的缺陷:加密不支持并行计算;对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;不可以抵御重放攻击。

OFB模式:

OFB模式的全称是Output-Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中。

OFB模式并不是通过密码算法对明文间接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,在这一点上OFB模式和CFB模式十分类似。

OFB模式的优点:不需求填充;可事前进行加密、解密的预备;加密、解密运用相同结构;对包含某些错误比特的密文进行解密时,只要明文中相对应的比特会出错。

OFB模式的缺陷:不支持并行计算、主动攻击者发转密文分组中的某些比特时,明文分组中相对应的比特也会被反转。

CTR模式:

CTR模式的全称是CounTeR 模式(计算器模式)。CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。

CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。也便是说,最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的。

CTR模式的优点:不要要填充、可事前进行加密、解密的预备、加密、解密运用相同结构、对包含某些错误比特的密文进行解密时,只要明文中相对应的比特会出错;支持并行计算(加密、解密)

CTR模式的缺陷:主动攻击者发转密文分组中的某些比特时,明文分组中相对应的比特也会被反转。

II. 找几张小的BMP图像,用ECB模式加密成密文图像,比较原图和加密图,看图像内容能否得到很好的加密,分析说明原因(原图、密文图粘贴上,排版尽量好看些,并写明分析结论):

加密效果好坏、原因分析:

第一张图片加密效果非常好,完全看不出来任何原图的痕迹,
第二章图片加密效果非常不好,直接就可以看出原图的大致图像

ECB对于同样的明文块会被加密成相同的密文块。第一张图片的色彩转换成明文块都有所不同,都是不连续的,但是第二张图片的明文块几乎是连续的,对应生成的密文块也是连续的,可以直接看出轮廓。

(4)任选程序语言,调用DES或AES等对称加密算法对一段文本(或文件)进行加密、解密(密文使用base64编码,不推荐使用ECB模式,理解一下IV参数含义),源代码文本、运行截图粘贴在下面。

代码:

#include <stdio.h>
#include <memory.h>
#include <time.h>
#include <stdlib.h>
#define PLAIN_FILE_OPEN_ERROR -1
#define KEY_FILE_OPEN_ERROR -2
#define CIPHER_FILE_OPEN_ERROR -3
#define OK 1
typedef char ElemType;
/*初始置换表IP*/
int IP_Table[64] = { 57,49,41,33,25,17,9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7,
56,48,40,32,24,16,8,0,
58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6};
/*逆初始置换表IP^-1*/
int IP_1_Table[64] = {39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,
37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,
35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58,26,
33,1,41,9,49,17,57,25,
32,0,40,8,48,16,56,24};
/*扩充置换表E*/
int E_Table[48] = {31, 0, 1, 2, 3, 4,
3, 4, 5, 6, 7, 8,
7, 8,9,10,11,12,
11,12,13,14,15,16,
15,16,17,18,19,20,
19,20,21,22,23,24,
23,24,25,26,27,28,
27,28,29,30,31, 0};
/*置换函数P*/
int P_Table[32] = {15,6,19,20,28,11,27,16,
0,14,22,25,4,17,30,9,
1,7,23,13,31,26,2,8,
18,12,29,5,21,10,3,24};
/*S盒*/
int S[8][4][16] =
/*S1*/
{{{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},
{0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},
{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},
{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}},
/*S2*/
{{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},
{3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},
{0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},
{13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}},
/*S3*/
{{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},
{13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},
{13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},
{1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}},
/*S4*/
{{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},
{13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},
{10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},
{3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}},
/*S5*/
{{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},
{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},
{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},
{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}},
/*S6*/{{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},
{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},
{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},
{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}},
/*S7*/
{{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},
{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},
{1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},
{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}},
/*S8*/
{{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},
{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},
{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},
{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}}};
/*置换选择1*/
int PC_1[56] = {56,48,40,32,24,16,8,
0,57,49,41,33,25,17,
9,1,58,50,42,34,26,
18,10,2,59,51,43,35,
62,54,46,38,30,22,14,
6,61,53,45,37,29,21,
13,5,60,52,44,36,28,
20,12,4,27,19,11,3};
/*置换选择2*/
int PC_2[48] = {13,16,10,23,0,4,2,27,
14,5,20,9,22,18,11,3,
25,7,15,6,26,19,12,1,
40,51,30,36,46,54,29,39,
50,44,32,46,43,48,38,55,
33,52,45,41,49,35,28,31};
/*对左移次数的规定*/
int MOVE_TIMES[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};
int ByteToBit(ElemType ch,ElemType bit[8]);
int BitToByte(ElemType bit[8],ElemType *ch);
int Char8ToBit64(ElemType ch[8],ElemType bit[64]);
int Bit64ToChar8(ElemType bit[64],ElemType ch[8]);
int DES_MakeSubKeys(ElemType key[64],ElemType subKeys[16][48]);
int DES_PC1_Transform(ElemType key[64], ElemType tempbts[56]);
int DES_PC2_Transform(ElemType key[56], ElemType tempbts[48]);
int DES_ROL(ElemType data[56], int time);
int DES_IP_Transform(ElemType data[64]);
int DES_IP_1_Transform(ElemType data[64]);
int DES_E_Transform(ElemType data[48]);
int DES_P_Transform(ElemType data[32]);
int DES_SBOX(ElemType data[48]);
int DES_XOR(ElemType R[48], ElemType L[48],int count);
int DES_Swap(ElemType left[32],ElemType right[32]);
int DES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[16][48], ElemType cipherBlock[8]);
int DES_DecryptBlock(ElemType cipherBlock[8], ElemType subKeys[16][48], ElemType plainBlock[8]);
int DES_Encrypt(char *plainFile, char *keyStr,char *cipherFile);
int DES_Decrypt(char *cipherFile, char *keyStr,char *plainFile);
/*字节转换成二进制*/
int ByteToBit(ElemType ch, ElemType bit[8]){int cnt;
for(cnt = 0;cnt < 8; cnt++){*(bit+cnt) = (ch>>cnt)&1;
}
return 0;
}
/*二进制转换成字节*/
int BitToByte(ElemType bit[8],ElemType *ch){int cnt;
for(cnt = 0;cnt < 8; cnt++){*ch |= *(bit + cnt)<<cnt;
}
return 0;
}
/*将长度为8的字符串转为二进制位串*/
int Char8ToBit64(ElemType ch[8],ElemType bit[64]){int cnt;
for(cnt = 0; cnt < 8; cnt++){ByteToBit(*(ch+cnt),bit+(cnt<<3));
}
return 0;
}
/*将二进制位串转为长度为8的字符串*/
int Bit64ToChar8(ElemType bit[64],ElemType ch[8]){int cnt;
memset(ch,0,8);
for(cnt = 0; cnt < 8; cnt++){BitToByte(bit+(cnt<<3),ch+cnt);
}
return 0;
}
/*生成子密钥*/
int DES_MakeSubKeys(ElemType key[64],ElemType subKeys[16][48]){ElemType temp[56];
int cnt;
DES_PC1_Transform(key,temp);/*PC1置换*/
for(cnt = 0; cnt < 16; cnt++){/*16轮跌代,产生16个子密钥*/
DES_ROL(temp,MOVE_TIMES[cnt]);/*循环左移*/
DES_PC2_Transform(temp,subKeys[cnt]);/*PC2置换,产生子密钥*/
}
return 0;
}
/*密钥置换1*/
int DES_PC1_Transform(ElemType key[64], ElemType tempbts[56]){int cnt;
for(cnt = 0; cnt < 56; cnt++){tempbts[cnt] = key[PC_1[cnt]];
}
return 0;
}
/*密钥置换2*/
int DES_PC2_Transform(ElemType key[56], ElemType tempbts[48]){int cnt;
for(cnt = 0; cnt < 48; cnt++){tempbts[cnt] = key[PC_2[cnt]];
}
return 0;
}
/*循环左移*/
int DES_ROL(ElemType data[56], int time){ElemType temp[56];
/*保存将要循环移动到右边的位*/
memcpy(temp,data,time);
memcpy(temp+time,data+28,time);
/*前28位移动*/
memcpy(data,data+time,28-time);
memcpy(data+28-time,temp,time);
/*后28位移动*/
memcpy(data+28,data+28+time,28-time);
memcpy(data+56-time,temp+time,time);
return 0;
}
/*IP置换*/
int DES_IP_Transform(ElemType data[64]){int cnt;
ElemType temp[64];
for(cnt = 0; cnt < 64; cnt++){temp[cnt] = data[IP_Table[cnt]];
}
memcpy(data,temp,64);
return 0;}
/*IP逆置换*/
int DES_IP_1_Transform(ElemType data[64]){int cnt;
ElemType temp[64];
for(cnt = 0; cnt < 64; cnt++){temp[cnt] = data[IP_1_Table[cnt]];
}
memcpy(data,temp,64);
return 0;
}
/*扩展置换*/
int DES_E_Transform(ElemType data[48]){int cnt;
ElemType temp[48];
for(cnt = 0; cnt < 48; cnt++){temp[cnt] = data[E_Table[cnt]];
}
memcpy(data,temp,48);
return 0;
}
/*P置换*/
int DES_P_Transform(ElemType data[32]){int cnt;
ElemType temp[32];
for(cnt = 0; cnt < 32; cnt++){temp[cnt] = data[P_Table[cnt]];
}
memcpy(data,temp,32);
return 0;
}
/*异或*/
int DES_XOR(ElemType R[48], ElemType L[48] ,int count){int cnt;
for(cnt = 0; cnt < count; cnt++){R[cnt] ^= L[cnt];
}
return 0;
}
/*S盒置换*/
int DES_SBOX(ElemType data[48]){int cnt;
int line,row,output;
int cur1,cur2;
for(cnt = 0; cnt < 8; cnt++){cur1 = cnt*6;
cur2 = cnt<<2;
/*计算在S盒中的行与列*/
line = (data[cur1]<<1) + data[cur1+5];
row = (data[cur1+1]<<3) + (data[cur1+2]<<2)
+ (data[cur1+3]<<1) + data[cur1+4];
output = S[cnt][line][row];
/*化为2进制*/
data[cur2] = (output&0X08)>>3;
data[cur2+1] = (output&0X04)>>2;
data[cur2+2] = (output&0X02)>>1;
data[cur2+3] = output&0x01;
}
return 0;
}
/*交换*/
int DES_Swap(ElemType left[32], ElemType right[32]){ElemType temp[32];
memcpy(temp,left,32);
memcpy(left,right,32);
memcpy(right,temp,32);
return 0;}
/*加密单个分组*/
int DES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[16][48], ElemType cipherBlock[8]){ElemType plainBits[64];
ElemType copyRight[48];
int cnt;
Char8ToBit64(plainBlock,plainBits);
/*初始置换(IP置换)*/
DES_IP_Transform(plainBits);
/*16轮迭代*/
for(cnt = 0; cnt < 16; cnt++){memcpy(copyRight,plainBits+32,32);
/*将右半部分进行扩展置换,从32位扩展到48位*/
DES_E_Transform(copyRight);
/*将右半部分与子密钥进行异或操作*/
DES_XOR(copyRight,subKeys[cnt],48);
/*异或结果进入S盒,输出32位结果*/
DES_SBOX(copyRight);
/*P置换*/
DES_P_Transform(copyRight);
/*将明文左半部分与右半部分进行异或*/
DES_XOR(plainBits,copyRight,32);
if(cnt != 15){/*最终完成左右部的交换*/
DES_Swap(plainBits,plainBits+32);
}
}
/*逆初始置换(IP^1置换)*/
DES_IP_1_Transform(plainBits);
Bit64ToChar8(plainBits,cipherBlock);
return 0;
}
/*解密单个分组*/
int DES_DecryptBlock(ElemType cipherBlock[8], ElemType subKeys[16][48],ElemType plainBlock[8]){ElemType cipherBits[64];
ElemType copyRight[48];
int cnt;
Char8ToBit64(cipherBlock,cipherBits);
/*初始置换(IP置换)*/
DES_IP_Transform(cipherBits);
/*16轮迭代*/
for(cnt = 15; cnt >= 0; cnt--){memcpy(copyRight,cipherBits+32,32);
/*将右半部分进行扩展置换,从32位扩展到48位*/
DES_E_Transform(copyRight);
/*将右半部分与子密钥进行异或操作*/
DES_XOR(copyRight,subKeys[cnt],48);
/*异或结果进入S盒,输出32位结果*/
DES_SBOX(copyRight);
/*P置换*/
DES_P_Transform(copyRight);
/*将明文左半部分与右半部分进行异或*/
DES_XOR(cipherBits,copyRight,32);
if(cnt != 0){/*最终完成左右部的交换*/
DES_Swap(cipherBits,cipherBits+32);
}
}
/*逆初始置换(IP^1置换)*/
DES_IP_1_Transform(cipherBits);
Bit64ToChar8(cipherBits,plainBlock);
return 0;
}
/*加密文件*/
int DES_Encrypt(char *plainFile, char *keyStr,char *cipherFile){FILE *plain,*cipher;
int count;
ElemType plainBlock[8],cipherBlock[8],keyBlock[8];ElemType bKey[64];
ElemType subKeys[16][48];
if((plain = fopen(plainFile,"rb")) == NULL){return PLAIN_FILE_OPEN_ERROR;
}
if((cipher = fopen(cipherFile,"wb")) == NULL){return CIPHER_FILE_OPEN_ERROR;
}
/*设置密钥*/
memcpy(keyBlock,keyStr,8);
/*将密钥转换为二进制流*/
Char8ToBit64(keyBlock,bKey);
/*生成子密钥*/
DES_MakeSubKeys(bKey,subKeys);
while(!feof(plain)){/*每次读8个字节,并返回成功读取的字节数*/
if((count = fread(plainBlock,sizeof(char),8,plain)) == 8){DES_EncryptBlock(plainBlock,subKeys,cipherBlock);
fwrite(cipherBlock,sizeof(char),8,cipher);
}
}
if(count){/*填充*/
memset(plainBlock + count,'\0',7 - count);
/*最后一个字符保存包括最后一个字符在内的所填充的字符数量*/
plainBlock[7] = 8 - count;
DES_EncryptBlock(plainBlock,subKeys,cipherBlock);
fwrite(cipherBlock,sizeof(char),8,cipher);
}
fclose(plain);
fclose(cipher);
return OK;
}
/*解密文件*/
int DES_Decrypt(char *cipherFile, char *keyStr,char *plainFile){FILE *plain, *cipher;
int count,times = 0;
long fileLen;
ElemType plainBlock[8],cipherBlock[8],keyBlock[8];
ElemType bKey[64];
ElemType subKeys[16][48];
if((cipher = fopen(cipherFile,"rb")) == NULL){return CIPHER_FILE_OPEN_ERROR;
}
if((plain = fopen(plainFile,"wb")) == NULL){return PLAIN_FILE_OPEN_ERROR;
}
/*设置密钥*/
memcpy(keyBlock,keyStr,8);
/*将密钥转换为二进制流*/
Char8ToBit64(keyBlock,bKey);
/*生成子密钥*/
DES_MakeSubKeys(bKey,subKeys);
/*取文件长度 */
fseek(cipher,0,SEEK_END);/*将文件指针置尾*/
fileLen = ftell(cipher); /*取文件指针当前位置*/
rewind(cipher); /*将文件指针重指向文件头*/
while(1){/*密文的字节数一定是8的整数倍*/
fread(cipherBlock,sizeof(char),8,cipher);
DES_DecryptBlock(cipherBlock,subKeys,plainBlock);
times += 8;
if(times < fileLen){fwrite(plainBlock,sizeof(char),8,plain);
}
else{break;
}
}
/*判断末尾是否被填充*/
if(plainBlock[7] < 8){for(count = 8 - plainBlock[7]; count < 7; count++){if(plainBlock[count] != '\0'){break;
}
}
}
if(count == 7){/*有填充*/
fwrite(plainBlock,sizeof(char),8 - plainBlock[7],plain);
}
else{/*无填充*/
fwrite(plainBlock,sizeof(char),8,plain);
}
fclose(plain);
fclose(cipher);
return OK;
}
int main()
{clock_t a,b;
a = clock();
DES_Encrypt("1.txt","key.txt","2.txt");
b = clock();
printf("加密消耗%d毫秒\n",b-a);
system("pause");
a = clock();
DES_Decrypt("2.txt","key.txt","3.txt");
b = clock();
printf("解密消耗%d毫秒\n",b-a);
getchar();
return 0;
}

1.txt为明文文件:

2.txt为加密后的密文文件
3.txt为解密后的明文文件
key.txt为秘钥文件:

运行演示:

2. txt为加密后的密文文件:

解密后的明文文件3.txt:

A.自学费斯妥密码,分析Feistel与SPN结构异同。
B. 看看Blowfish密码,分析其与DES异同。

A.
Feistel结构
结构图:

在密码学研究中,Feistel 密码结构是用于分组密码中的一种对称结构。以它的发明者 Horst Feistel 为名。

Feistel结构是典型的迭代密码.Feistel结构的解密与加密是完全一样的,除了所使用的子密钥的顺序正好相反。

对其简单的理解是:
给明文分组(L,R)
对R进行加密
密文=加密后的R+L(即LR的位置交换)

SPN结构
结构图:

SPN结构也是一种特殊的迭代密码 。SPN结构和Feistel结构相比,可以得到更快速的扩散,但是SPN密码的加解密通常不相似。

B.
DES

数据加密标准是IBM提出的,第一个基于Lucifer算法的加密技术。作为第一个加密标准,自然会带有些许瑕疵漏洞使其不是特别的安全。

Blowfish
Blowfish由Bruce Schneier发明的一种在世界范围被广泛使用的加密方式。Blowfish使用16到448位不同长度的密钥对数据进行16次加密。这样黑客们基本不可能对其进行解密。直到现在(作者发文时),还没有针对blowfish的破解(B. Schneier)

效能对比
根据对比结果,我们发现AES和Blowfish遥遥领先于其他几种加密方式。
底下是一组针对大约256MB尺寸数据进行加密的测试(此测试在Windows XP SP1操作系统,P4 2.1GHz CPU):

信息安全管理——对称加密相关推荐

  1. mysql对称连接什么意思_对称加密与非对称加密的区别是什么

    区别:1.对称加密中加密和解密使用的秘钥是同一个:非对称加密中采用两个密钥,一般使用公钥进行加密,私钥进行解密.2.对称加密解密的速度比较快,非对称加密和解密花费的时间长.速度相对较慢.3.对称加密的 ...

  2. 对称加密和非对称加密是什么?

    本文内容如有错误.不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢. 文章目录 简述 术语 对称加密 非对称加密 区别 总结 参考资料 简述 在当今的网络世界中,存在着未经授权访问所有形 ...

  3. 【RSA原理1】浅谈--什么是非对称加密?(加密通信的原理)

    为什么会写这个专题呢?主要还是在学习https如何保护信息安全的时候涉及到了这个基础,为此我也是恶补了一下,当然为了避免忘记,这一专栏我将对这一块内容进行陆续讲解更新.如果觉得有用,欢迎大家一件三连! ...

  4. 加密相关(对称加密、非对称加密、信息摘要、数字签名、CA数字证书)

    1.对称加密: 说明:加密的密钥和解密的密钥相同:效率快:适合加密大信息量 常见算法:DES.3DES.AES.RC-5 块加密: 流加密:数据量大时效率高 2.非对称加密: 说明:加密的密钥和解密的 ...

  5. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  6. linux -对称加密、 非对称加密

    对称加密 加密和解密用的是相同的密码. 安全强度依赖密码的强度. 加密和解密效率非常快. 非对称加密 加密和解密用的是不相同的密钥. 效率非常低,不适合对大尺寸数据进行处理. 私钥 是钥匙持有人自己生 ...

  7. 安全防御知识总结(IDS,APT,恶意软件,反病毒网关,对称/不对称加密)

    1. 什么是IDS? IDS即入侵检测系统(Intrusion Detection System),是一种安全检测系统,通过监控网络流量.系统日志等信息,来检测系统中的安全漏洞.异常行为和入侵行为. ...

  8. .NET中的密码学--对称加密

    作者:未知 介绍 在.NET之前,使用非托管的Win32APIs加密解密数据是一件非常痛苦的事情.为了这个加密解密的目的,.NET配置了一组类(和命名空间).现在你有很多类可以使用每种不同的算法保护你 ...

  9. 【安全加密技术】 对称加密

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/46822663 上篇了解了<非对称加密>后 今天我来继续了解下加密技术中 ...

最新文章

  1. iOS enum 定义与使用
  2. [刘阳Java]_Web前端入门级练习_迅雷官宣网设计
  3. python五十七:str与repr,类似于 java对象中的tostring()方法
  4. 9.2 协同过滤-机器学习笔记-斯坦福吴恩达教授
  5. 笔记-中项案例题-2020年下-风险管理
  6. 如何科学地完成一场 AR 发布会?
  7. mysql数据库表中的类型_MySQL数据库中表类型MyISAM与InnoDB的区别
  8. 由于找不到mfc110.dll,无法继续执行代码的解决方法
  9. 第41章 实施数据库审计
  10. Android之AsyncTask学习笔记
  11. php 取post原始,PHP 获取POST的最原始数据方法
  12. Java基础之创建对象的五种方式
  13. 16QAM-调制解调MATLAB
  14. iOS 实现Lottie动画
  15. Axure 下载教程
  16. 桌面点右键,白屏怎么办
  17. 启动Tomcat服务器报错:Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost are alrea
  18. Spring boot 事物管理
  19. ISIS—ISIS中LSP(数据库)同步如何保证LSDB可靠性—04
  20. 视频教程-微信小程序商城15天从零实战课程-微信开发

热门文章

  1. 如何写好论文讨论部分
  2. macos 安装 upx
  3. 百度李彦宏:几乎每年我都有做不下去了的感觉
  4. 在Ubuntu下如何压缩一个文件夹,如何查看文件夹大小
  5. RTOS实时操作系统的认识
  6. ES6基础1—面向过程的数据结构
  7. 联想小新air13计算机专业,联想小新Air13怎么样 值不值得买
  8. OA办公系统快速升级方案,实现复杂流程和移动签批办公
  9. 无线充电底座的自动对焦方法
  10. 温湿度传感器(AM2312)