des代码实现对任意长度明文加密_DES加密算法实现

1 //该程序实现了文本文档的DES加密和解密。

2

3 #include

4 #include

5 #include

6 #include

7 using namespacestd;8

9 //IP置换表

10 char IP[64] ={11 57,49,41,33,25,17,9,1,12 59,51,43,35,27,19,11,3,13 61,53,45,37,29,21,13,5,14 63,55,47,39,31,23,15,7,15 56,48,40,32,24,16,8,0,16 58,50,42,34,26,18,10,2,17 60,52,44,36,28,20,12,4,18 62,54,46,38,30,22,14,6};19

20 //IP^-1 置换表

21 char IP_1[64] ={22 39,7,47,15,55,23,63,31,23 38,6,46,14,54,22,62,30,24 37,5,45,13,53,21,61,29,25 36,4,44,12,52,20,60,28,26 35,3,43,11,51,19,59,27,27 34,2,42,10,50,18,58,26,28 33,1,41,9,49,17,57,25,29 32,0,40,8,48,16,56,24};30

31 //扩展置换表E

32 int E[48] = {31, 0, 1, 2, 3, 4,33 3, 4, 5, 6, 7, 8,34 7, 8,9,10,11,12,35 11,12,13,14,15,16,36 15,16,17,18,19,20,37 19,20,21,22,23,24,38 23,24,25,26,27,28,39 27,28,29,30,31, 0};40

41 //置换函数P

42 int P[32] = {15,6,19,20,28,11,27,16,43 0,14,22,25,4,17,30,9,44 1,7,23,13,31,26,2,8,45 18,12,29,5,21,10,3,24};46

47 //S盒

48 int S[8][4][16] ={49 {{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},50 {0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},51 {4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},52 {15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}},53

54 {{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},55 {3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},56 {0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},57 {13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}},58

59 {{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},60 {13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},61 {13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},62 {1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}},63

64 {{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},65 {13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},66 {10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},67 {3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}},68

69 {{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},70 {14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},71 {4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},72 {11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}},73

74 {{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},75 {10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},76 {9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},77 {4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}},78

79 {{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},80 {13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},81 {1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},82 {6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}},83

84 {{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},85 {1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},86 {7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},87 {2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}}};88 //置换选择1

89 int PC_1[56] = {56,48,40,32,24,16,8,90 0,57,49,41,33,25,17,91 9,1,58,50,42,34,26,92 18,10,2,59,51,43,35,93 62,54,46,38,30,22,14,94 6,61,53,45,37,29,21,95 13,5,60,52,44,36,28,96 20,12,4,27,19,11,3};97

98 //置换选择2

99 int PC_2[48] = {13,16,10,23,0,4,2,27,100 14,5,20,9,22,18,11,3,101 25,7,15,6,26,19,12,1,102 40,51,30,36,46,54,29,39,103 50,44,32,47,43,48,38,55,104 33,52,45,41,49,35,28,31};105

106 //对左移次数的规定

107 int LS[17] = {0,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};108

109 //存放子密钥

110 unsigned __int64 K[17];111

112 //将含64个二进制字符的字符串转换为二进制形式存储在long long int中

113 unsigned __int64 str2bit(unsigned chars[])114 {115 unsigned __int64 bin = 0;116 inti;117 for(i=0;i<64;i++){118 bin = bin<<1 | (s[i]-'0'); //s[i]>>j & 1 表示取s[i]的第j位

119 }120 returnbin;121 }122

123 //将含8位字符串转换为二进制形式存储在long long int中,例ABCDEFGH转换为64位二进制数

124 unsigned __int64 bstr2bit(unsigned chars[])125 {126 unsigned __int64 bin = 0;127 inti,j;128 for(i=0;i<8;i++){129 for(j=0;j<8;j++){130 bin = bin | ( (unsigned __int64)((s[i]>>j)%2) << (j+8*(7-i)) ); //将s[i]的第j位(低位开始)取出放到bin的对应位置

131 }132 }133 returnbin;134 }135

136 //将 unsigned __int64 形式的按十六进制串输出(64位有效的二进制数串)

137 voidDisplayHex64(unsigned __int64 bin)138 {139 int i,t=0;140 for(i=63;i>=0;i--){141 t = t<<1 | ((bin>>i) & 1);142 if(i%4==0){143 if(0<=t && t<=9)144 printf("%d",t);145 else if(10<=t && t<=15)146 printf("%c",65+t-10);147 t=0;148 }149 if(i%8==0)150 printf(" ");151 }152 printf("\n");153 }154 //将 unsigned __int64 形式的按十六进制串输出(48位有效的二进制数串)

155 voidDisplayHex48(unsigned __int64 bin)156 {157 int i,t=0;158 for(i=47;i>=0;i--){159 t = t<<1 | ((bin>>i) & 1);160 if(i%4==0){161 if(0<=t && t<=9)162 printf("%d",t);163 else if(10<=t && t<=15)164 printf("%c",65+t-10);165 t=0;166 }167 if(i%8==0)168 printf(" ");169 }170 printf("\n");171 }172 //将 unsigned __int64 形式的按十六进制串输出(32位有效的二进制数串)

173 voidDisplayHex32(unsigned __int64 bin)174 {175 int i,t=0;176 for(i=31;i>=0;i--){177 t = t<<1 | ((bin>>i) & 1);178 if(i%4==0){179 if(0<=t && t<=9)180 printf("%d",t);181 else if(10<=t && t<=15)182 printf("%c",65+t-10);183 t=0;184 }185 if(i%8==0)186 printf(" ");187 }188 printf("\n");189 }190 //将 unsigned __int64 形式的按十六进制串输出(28位有效的二进制数串)

191 voidDisplayHex28(unsigned __int64 bin)192 {193 int i,t=0;194 for(i=27;i>=0;i--){195 t = t<<1 | ((bin>>i) & 1);196 if(i%4==0){197 if(0<=t && t<=9)198 printf("%d",t);199 else if(10<=t && t<=15)200 printf("%c",65+t-10);201 t=0;202 }203 if(i%8==0)204 printf(" ");205 }206 printf("\n");207 }208

209 //将 unsigned __int64 形式的二进制串和十六进制输出(64位有效的二进制数串)

210 voidDisplayBin64(unsigned __int64 bin)211 {212 inti;213 for(i=63;i>=0;i--){214 printf("%d",(bin>>i) %2);215 }216 printf("\n");217 DisplayHex64(bin);218 }219

220 //将 unsigned __int64 形式的二进制串和十六进制输出(48位有效的二进制数串)

221 voidDisplayBin48(unsigned __int64 bin)222 {223 inti;224 for(i=47;i>=0;i--){225 printf("%d",(bin>>i) %2);226 }227 printf("\n");228 DisplayHex48(bin);229 }230

231 //将 unsigned __int64 形式的二进制串和十六进制输出(32位有效的二进制数串)

232 voidDisplayBin32(unsigned __int64 bin)233 {234 inti;235 for(i=31;i>=0;i--){236 printf("%d",(bin>>i) %2);237 }238 printf("\n");239 DisplayHex32(bin);240 }241

242 //将 unsigned __int64 形式的二进制串和十六进制输出(28位有效的二进制数串)

243 voidDisplayBin28(unsigned __int64 bin)244 {245 inti;246 for(i=27;i>=0;i--){247 printf("%d",(bin>>i) %2);248 }249 printf("\n");250 DisplayHex28(bin);251 }252

253

254 /*------------------------------ 【1】初始置换IP ------------------------------255 * 把明文顺序打乱重新排列,置换输出为64位,256 * 数据置换后的第一位,第二位分别是原来的58、50位257 */

258

259 unsigned __int64 InitReplace(unsigned __int64 bin) //初始置换IP

260 {261 unsigned __int64 t = 0;262 inti;263 for(i=0;i<64;i++){264 t = t | ( (bin>>(63-IP[i])) %2) << (63-i);265 }266 returnt;267 }268

269 /*------------------------------ 【2】将置换输出的64位数据分成左右两半 ------------------------------270 * 左一半称为L0,右一半称为R0,各32位。271 */

272

273 void DivideLR(unsigned __int64 binip,unsigned __int64 &L0,unsigned __int64 &R0) //将置换输出的64位数据分为L0(32位),R0(32位)两部分

274 {275 unsigned __int64 one = 1;276 L0 = binip >> 32;277 R0 = binip % (one<<32);278 }279

280 /*------------------------------ 【3】计算函数的16轮迭代 ------------------------------281 * 1~16轮加密迭代282 */

283

284 //置换选择1,64->56

285 unsigned __int64 FunPC_1(unsigned __int64 bink)286 {287 unsigned __int64 binpc_1 = 0;288 inti;289 for(i=0;i<56;i++)290 binpc_1 |= ( (bink>>(63-PC_1[i])) %2) << (55-i);291 returnbinpc_1;292 }293

294 //获得第i轮C,D,即Ci-1,Di-1 ==> Ci,Di

295 void getNextCD(int i,unsigned __int64 &C,unsigned __int64 &D)296 {297 unsigned __int64 t=0,one=1;298 t = C >> (28-LS[i]);299 C = (C<> (28-LS[i]);302 D = (D<

306 //置换选择2,56->48

307 unsigned __int64 FunPC_2(unsigned __int64 t)308 {309 //获得子密钥k

310 unsigned __int64 k=0;311 inti;312 for(i=0;i<48;i++)313 k |= ( (t>>(55-PC_2[i])) %2) << (47-i);314 returnk;315 }316

317 //子密钥生成

318 voidProduceK(unsigned __int64 bink)319 {320 unsigned __int64 binpc_1,one=1,C=0,D=0;321 binpc_1 = FunPC_1(bink); //置换选择1322

323 //分成2个28位

324 C = binpc_1 >> 28;325 D = binpc_1 % (one << 28);326

327 inti;328 for(i=1;i<=16;i++){329 //确定子密钥K[i]

330 getNextCD(i,C,D);331 printf("第%d轮:\n",i);332 printf("C[%d] =",i);333 DisplayBin28(C);334 printf("D[%d] =",i);335 DisplayBin28(D);336 printf("\n");337

338 unsigned __int64 t=0;339 t = ((C<<28) | D)%(one<<56);340 K[i] = FunPC_2(t); //进行置换选择2,将56位->48位子密钥

341 }342 }343

344 //扩展置换E,32->48

345 unsigned __int64 FunE(unsigned __int64 R)346 {347 unsigned __int64 t = 0;348 inti;349 for(i=0;i<48;i++)350 t |= ( (R>>(31-E[i])) %2) << (47-i);351 returnt;352 }353

354 //S盒代换

355 unsigned __int64 FunS(unsigned __int64 RX)356 {357 intx,y,i;358 unsigned __int64 one = 1,t,RS = 0;359 for(i=0;i<8;i++){360 t = ( RX >> (6*(7-i)) ) % (one<<6);361 x = t>>5;362 x = (x<<1) | (t%2);363 y = (t<<1)%(one<<6)>>2;364 RS = RS<<4 |S[i][x][y];365 }366 returnRS;367 }368

369 //置换P运算

370 unsigned __int64 FunP(unsigned __int64 RS)371 {372 unsigned __int64 RP = 0;373 inti;374 for(i=0;i<32;i++)375 RP |= ( (RS>>(31-P[i])) %2) << (31-i);376 returnRP;377 }378

379 //轮函数f(R,K)

380 unsigned __int64 f(inti,unsigned __int64 R,unsigned __int64 k)381 {382 unsigned __int64 RE,RX,RS,RP;383 RE = FunE(R); //将32位Ri-1扩展置换为48位

384 RX = RE ^ k; //将48位RE与子密钥k异或运算

385 RS = FunS(RX); //S盒代换

386 RP = FunP(RS); //置换P运算

387 returnRP;388 }389

390 unsigned __int64 Iteration16(unsigned __int64 L0,unsigned __int64 R0) //进行16次迭代计算

391 {392 inti;393 unsigned __int64 Ri =R0;394 unsigned __int64 Li =L0;395 printf("L0=");396 DisplayBin32(L0);397 printf("R0=");398 DisplayBin32(R0);399 printf("\n");400 for(i=1;i<=16;i++){401 printf("第%d轮加密:\n",i);402 unsigned __int64 t =Ri;403

404 //轮函数

405 Ri =f(i,Ri,K[i]);406 printf("f(R%d,K%d)=",i-1,i);407 DisplayBin32(Ri);408

409 //Li-1和轮函数结果异或运算得到Ri

410 Ri = Li ^Ri;411 //轮函数运算结果即是Li

412 Li =t;413

414 //输出Li和Ri

415 printf("L%d=",i);416 DisplayBin32(Li);417 printf("R%d=",i);418 DisplayBin32(Ri);419 printf("\n");420 }421

422 return Ri<<32 |Li;423 }424

425 unsigned __int64 InverseIteration16(unsigned __int64 L0,unsigned __int64 R0) //进行逆16次迭代计算,为解密过程

426 {427 inti;428 unsigned __int64 Ri =R0;429 unsigned __int64 Li =L0;430 printf("L0=");431 DisplayBin32(L0);432 printf("R0=");433 DisplayBin32(R0);434 printf("\n");435 for(i=16;i>=1;i--){436 printf("第%d轮加密:\n",17-i);437 unsigned __int64 t =Ri;438

439 //轮函数

440 Ri =f(i,Ri,K[i]);441 printf("f(R%d,K%d)=",i-1,i);442 DisplayBin32(Ri);443

444 //Li-1和轮函数结果异或运算得到Ri

445 Ri = Li ^Ri;446 //轮函数运算结果即是Li

447 Li =t;448

449 //输出Li和Ri

450 printf("L%d=",i);451 DisplayBin32(Li);452 printf("R%d=",i);453 DisplayBin32(Ri);454 printf("\n");455 }456

457 return Ri<<32 |Li;458 }459

460

461

462 /*------------------------------ 【4】逆初始置换IP^-1 ------------------------------463 * 把数据打乱重排,产生64位密文。464 */

465

466 unsigned __int64 InverseInitReplace(unsigned __int64 bin) //进行逆初始置换IP^-1

467 {468 unsigned __int64 t = 0;469 inti;470 for(i=0;i<64;i++){471 t = t | ( (bin>>(63-IP_1[i])) %2) << (63-i);472 }473 returnt;474 }475

476 void printOut(FILE*fo,unsigned __int64 bin)477 {478 char ans[8]={0},t=0;479 int i,cnt=0;480 for(i=63;i>=0;i--){481 t = t<<1 | ((bin>>i)%2);482 if(i%8==0){483 ans[cnt++] =t;484 t = 0;485 }486 }487 fwrite(ans,1,8,fo);488 }489

490 //加密函数

491 voidEncryption()492 {493 //文件读入

494 FILE* fm = fopen(".\\Plaintext.txt","rb"); //明文文件

495 FILE* fk = fopen(".\\key.txt","r"); //密钥文件

496 FILE* fo = fopen(".\\Ciphertext.txt","wb"); //密文文件

497

498 if(fm==NULL){499 printf("明文文件input.txt打开失败\n");500 }501 if(fk==NULL){502 printf("密钥文件key.txt打开失败\n");503 }504 if(fo==NULL){505 printf("加密后文件output.txt打开失败\n");506 }507

508 unsigned char s[165]={0},key[65]={0};509 inti;510

511 fscanf(fk,"%s",key); //读取密钥

512

513 while(fread(s,1,8,fm)){514 printf("----------------------------------------------------------------------------\n");515 printf("\n");516 printf("当前读取的明文串为:\n");517 printf("%s\n",s);518 unsigned __int64 bin = bstr2bit(s); //将加密串转换为2进制形式

519 printf("\n");520 unsigned __int64 bink = str2bit(key); //将密钥串转换为2进制形式

521 printf("\n");522

523 //输出

524 printf("\n");525 printf("【输入】\n");526 printf("输入的二进制明文串:\n");527 DisplayBin64(bin);528 printf("输入的二进制密钥串:\n");529 DisplayBin64(bink);530 printf("\n");531

532 //IP置换

533 printf("明文初始化置换后:\n");534 unsigned __int64 binip =InitReplace(bin);535 DisplayBin64(binip);536 printf("\n");537

538 //获得L0,R0

539 printf("将明文分割为L0,R0两部分:\n");540 unsigned __int64 L0,R0;541 DivideLR(binip,L0,R0); //将binip分割为L0和R0542 //输出L0,R0

543 printf("L0为:");544 DisplayBin32(L0);545 printf("R0为:");546 DisplayBin32(R0);547 printf("\n");548

549 //生成16个子密钥,并输出

550 printf("--------------- 子密钥生成过程 ---------------\n");551 memset(K,0,sizeof(K));552 ProduceK(bink);553 printf("生成的16个子密钥:\n");554 for(i=1;i<=16;i++){555 printf("K[%d]为",i);556 DisplayBin48(K[i]);557 //printf("\n");

558 }559 printf("\n");560

561 //16次加密迭代

562 printf("--------------- 16轮加密迭代 --------------- \n");563 unsigned __int64 binIter =Iteration16(L0,R0);564 printf("迭代加密后的结果:\n");565 DisplayBin64(binIter);566 printf("\n");567

568 //逆初始置换IP_1

569 unsigned __int64 binip_1 =InverseInitReplace(binIter);570 printf("最后,逆初始置换:\n");571 DisplayBin64(binip_1);572 printf("\n");573

574 //输出最终加密结果

575 printf("【加密结果】\n明文 \"%s\" 的DES加密的结果为:\n",s);576 DisplayBin64(binip_1);577

578 printf("\n");579 printf("----------------------------------------------------------------------------\n");580 printf("\n");581

582 //将加密结果写到加密文件中

583 printOut(fo,binip_1);584

585 memset(s,0,sizeof(s));586 }587 //文件关闭

588 fclose(fm);589 fclose(fk);590 fclose(fo);591 }592

593 //解密函数

594 voidDecryption()595 {596 //文件读入

597 FILE* fm = fopen(".\\Ciphertext.txt","rb"); //密文文件

598 FILE* fk = fopen(".\\key.txt","r"); //密钥文件

599 FILE* fo = fopen(".\\DecrypPlaintext.txt","wb"); //解密后文件

600

601 if(fm==NULL){602 printf("密文文件 Ciphertext.txt 打开失败\n");603 }604 if(fk==NULL){605 printf("密钥文件 key.txt 打开失败\n");606 }607 if(fo==NULL){608 printf("解密后文件 DecrypPlaintext.txt 打开失败\n");609 }610

611 unsigned char s[165]={0},key[65]={0};612 inti;613

614 fscanf(fk,"%s",key); //读取密钥

615

616 while(fread(s,1,8,fm)){617 printf("----------------------------------------------------------------------------\n");618 printf("\n");619 printf("当前读取的密文串为:\n");620 printf("%s\n",s);621 unsigned __int64 bin = bstr2bit(s); //将密文串转换为2进制形式

622 printf("\n");623 unsigned __int64 bink = str2bit(key); //将密钥串转换为2进制形式

624 printf("\n");625

626 //输出

627 printf("----------------------------------------------------------------------------\n");628 printf("\n");629 printf("【输入】\n");630 printf("输入的二进制密文串:\n");631 DisplayBin64(bin);632 printf("输入的二进制密钥串:\n");633 DisplayBin64(bink);634 printf("\n");635

636 //IP置换

637 printf("密文初始化置换后:\n");638 unsigned __int64 binip =InitReplace(bin);639 DisplayBin64(binip);640 printf("\n");641

642 //获得L0,R0

643 printf("将密文分割为L0,R0两部分:\n");644 unsigned __int64 L0,R0;645 DivideLR(binip,L0,R0); //将binip分割为L0和R0646 //输出L0,R0

647 printf("L0为:");648 DisplayBin32(L0);649 printf("R0为:");650 DisplayBin32(R0);651 printf("\n");652

653 //生成16个子密钥,并输出

654 printf("--------------- 子密钥生成过程 ---------------\n");655 memset(K,0,sizeof(K));656 ProduceK(bink);657 printf("生成的16个子密钥:\n");658 for(i=1;i<=16;i++){659 printf("K[%d]为",i);660 DisplayBin48(K[i]);661 //printf("\n");

662 }663 printf("\n");664

665 //16次加密迭代

666 printf("--------------- 16轮加密迭代 --------------- \n");667 unsigned __int64 binIter =InverseIteration16(L0,R0);668 printf("迭代解密后的结果:\n");669 DisplayBin64(binIter);670 printf("\n");671

672 //逆初始置换IP_1

673 unsigned __int64 binip_1 =InverseInitReplace(binIter);674 printf("最后,逆初始置换:\n");675 DisplayBin64(binip_1);676 printf("\n");677

678 //输出最终加密结果

679 printf("【解密结果】\n密文 \"%s\" 的DES解密的结果为:\n",s);680 DisplayBin64(binip_1);681

682 printf("\n");683 printf("----------------------------------------------------------------------------\n");684

685 //将加密结果写到加密文件中

686 printOut(fo,binip_1);687

688 memset(s,0,sizeof(s));689 }690 //文件关闭

691 fclose(fm);692 fclose(fk);693 fclose(fo);694 }695

696 int Menu(int &Case)697 {698 int in;699

700 FILE* fk = fopen(".\\key.txt","r"); //密钥文件

701 if(fk==NULL){702 printf("密钥文件key.txt打开失败\n");703 }704

705 unsigned char key[100];706 fscanf(fk,"%s",key); //读取密钥

707 unsigned __int64 bink = str2bit(key); //将密钥串转换为2进制形式

708 printf("【%d】当前密钥(key)为:(二进制形式)\n",Case++);709 DisplayBin64(bink);710 printf("(密钥存储在 key.txt 中)\n");711 printf("\n");712

713 printf("请选择,是使用DES算法加密还是解密?\n");714 printf("(加密过程:Plaintext.txt => Ciphertext.txt\n");715 printf("解密过程:Ciphertext.txt => DecrypPlaintext.txt )\n");716 printf("[1] 加密\n");717 printf("[2] 解密\n");718 printf("[0] 退出程序\n");719

720 scanf("%d",&in);721 getchar();722 fflush(stdin); //清空缓冲区

723

724 if(in==0 || in==1 || in==2){725 return in;726 }727 else{728 printf("输入错误,请重新输入!\n");729 printf("\n");730 printf("----------------------------------------------------------------------------\n");731 printf("\n");732 return -1;733 }734 }735

736 /*

737 * 主函数738 */

739 intmain()740 {741 int Case=1,in;742 while(1){743 in =Menu(Case);744 switch(in){745 case -1: //输入错误,进入下次循环

746 break;747 case 0: //退出程序

748 printf("谢谢使用 :)\n");749 return 0;750 case 1: //加密

751 Encryption();752 break;753 case 2: //解密

754 Decryption();755 break;756 }757 }758 return 0;759 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值