ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:21.90KB ,
资源ID:5779930      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5779930.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用DES算法对图片进行加密解密.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用DES算法对图片进行加密解密.docx

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