1、用DES算法对图片进行加密解密用DES算法对图片进行加密解密/main.cpp #include DES.h #include #include #include using namespace std; void Encrypt_Mode(void); void Test_Mode(void); int main() int choose; coutttt# S-BOX Design #endl; cout1.Use Standard S-Boxn2.Use Random S-Boxn3.Use Linearity S-Boxn4.My Design S-Boxendl; coutchoos
2、e; if( (choose != 1) & (choose != 2) & (choose != 3) & (choose != 4) ) coutError Choose!endl; return 1; system(cls); switch(choose) case 1: break; case 2: GetRandSBox(); break; case 3: GetLineSBox(); break; case 4: MySBox(); break; coutttt# DES Encrypt System #endl; cout1.Encrypt Moden2.Test Modeend
3、l; coutchoose; system(cls); switch(choose) case 1: Encrypt_Mode(); break; case 2: Test_Mode(); break; default: coutError Choose!endl; return 0; / void Encrypt_Mode() uvar32 FileSize,Offset,DataSize; char IV=wang yao; char key8=1,9,8,7,0,3,1,4; char plaint8=0,crypt8=0; /string Header; char HeaderHEAD
4、_LEN; ifstream fin; ofstream fout; int choose; while(true) couttttDES Encrypt BMP File Systemendl; coutn1.EBC ENCRYPTn2.EBC DECRYPTn3.CBC ENCRYPTn4.CBC DECRYPTn5.Exitendl; coutchoose; if(choose = 5) break; else if( (choose != 1) & (choose != 2) & (choose != 3) & (choose != 4) ) coutWrong Choose!endl
5、; break; cout filename; ifstream fin(filename.c_str(),ios:binary); string outfilename = filename; outfilename = out_ + outfilename; ofstream fout(outfilename.c_str(),ios:binary); if(!fin | !fout) coutOpen File Error!endl; return; fin.seekg(2); /Skip BM(the head of the BMP file) fin.read(char*)&FileS
6、ize ,sizeof(uvar32); /Get the BMP File Size fin.seekg(sizeof(uvar32),ios_base:cur); /Skip the Reserved Field fin.read(char*)&Offset ,sizeof(uvar32); /Get the Offset of the Real Size DataSize = FileSize - Offset; /Get the Data Size;Also can be done by DataSize Field in the Header /Set the Key Des_Set
7、Key(key); /Copy the Header to encrypt file fin.seekg(ios:beg); fin.read(Header,Offset); fout.write(Header,Offset); memcpy(crypt,IV,8); /Get the IV key /Do DES Encrypt for(int i=0;i DataSize/8;i+) fin.read(plaint,8); switch(choose) case 1: /ECB DES ENCRYPT ECB_Des_Run(crypt,plaint, ENCRYPT); fout.wri
8、te(crypt,8); break; case 2: /ECB DES DECRYPT ECB_Des_Run(crypt,plaint, DECRYPT); fout.write(crypt,8); break; case 3: /CBC DES ENCRYPT CBC_Des_Run(crypt,plaint, ENCRYPT); fout.write(crypt,8); break; case 4: /CBC DES DECRYPT CBC_Des_Run(crypt,plaint, DECRYPT); fout.write(crypt,8); memcpy(crypt,plaint,
9、8); /Get the IV key system(cls); fin.close(); fout.close(); system(pause); void Test_Mode() bool PlaintBits164=0,PlaintBits264=0; /Snowslip_Test bool PlaintBitsPLAINT_SIZE64; /Completeness_Test int choose; while (true) coutttt# DES Test Mode #endl; cout1.Snowslip Testn2.Completeness Testn3.Different
10、ial Cryptanalysis Testn4.Exitendl; coutchoose; if (choose = 4) break; switch(choose) case 1: /Snowslip_Test GetRandPlaint_Snowslip(PlaintBits1,PlaintBits2); Snowslip_Test(PlaintBits1,PlaintBits2); break; case 2: /Completeness_Test GetRandPlaint_Complete(PlaintBits); Completeness_Test(PlaintBits); br
11、eak; case 3: Differential_Analysis(); break; default: coutError Choose!endl; system(pause); system(cls); /main.cpp 以下为des的代码: /DES.cpp #include #include #include #include #include DES.h using namespace std; / / initial permutation IP const static char IP_Table64 = 58, 50, 42, 34, 26, 18, 10, 2, 60,
12、52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 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 ; / final permutation IP-1 const static char IPR_Table64 = 40, 8, 48, 16, 56, 24, 64, 32,
13、 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 ; / expansion operation matrix static const char E_Table48 = 32, 1, 2, 3, 4, 5, 4, 5
14、, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 ; / 32-bit permutation function P used on the output of the S-boxes const static char P_Table32 = 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5,
15、 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 ; / permuted choice table (key) const static char PC1_Table56 = 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14,
16、 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 ; / permuted choice key (table) const static char PC2_Table48 = 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 ; /
17、number left rotations of pc1 const static char LOOP_Table16 = 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 ; /extern char S_Box8416; / The (in)famous S-boxes /const static char S_Box8416 = static char S_Box8416 = / 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,
18、 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
19、, 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,
20、 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,
21、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, 1
22、1, 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, 1
23、2, 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 ; / static bool SubKey1648;/ 16圈子密钥 / void ECB_Des_Run(char Out8, char In8, bool Type) static bool M64, Tmp32, *Li = &M0, *Ri = &M32;
24、 ByteToBit(M, In, 64); Transform(M, M, IP_Table, 64); if( Type = ENCRYPT ) /fk(L,R) = (LF(R,SK),R) for(int i=0; i=0; i-) memcpy(Tmp, Li, 32); F_func(Li, SubKeyi); Xor(Li, Ri, 32); memcpy(Ri, Tmp, 32); Transform(M, M, IPR_Table, 64); BitToByte(Out, M, 64); void CBC_Des_Run(char Out8, char In8, bool T
25、ype) static bool M64,N64, Tmp32, *Li = &M0, *Ri = &M32; ByteToBit(M, In, 64); ByteToBit(N, Out, 64); if (Type = ENCRYPT) Xor(M,N, 64); Transform(M, M, IP_Table, 64); if( Type = ENCRYPT ) /fk(L,R) = (LF(R,SK),R) for(int i=0; i=0; i-) memcpy(Tmp, Li, 32); F_func(Li, SubKeyi); Xor(Li, Ri, 32); memcpy(R
26、i, Tmp, 32); Transform(M, M, IPR_Table, 64); if(Type = DECRYPT) Xor(M,N, 64); BitToByte(Out, M, 64); /BitToByte(In, N, 64); void Des_SetKey(const char Key8) static bool K64, *KL = &K0, *KR = &K28; ByteToBit(K, Key, 64); /PC1 Transform Transform(K, K, PC1_Table, 56); for(int i=0; i16; i+) RotateL(KL, 28, LOOP_Tablei); /Left shift circle RotateL(KR, 28, LOOP_Tablei); /PC2 Transform Transform(SubKeyi, K, PC2_Table, 48); /A Round of DES void F_func(bool In32, const bool Ki48) static bool MR48; /E Transform Transform(MR, In, E_Table, 48); Xor(MR, Ki, 48); S_func(In, MR); /S BOX /P Transform Tr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1