日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DES算法实现S盒替换

發(fā)布時(shí)間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DES算法实现S盒替换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、實(shí)驗(yàn)?zāi)康?#xff1a;

理解DES算法并掌握S盒替換原理,用代碼實(shí)現(xiàn)S盒替換。

二、實(shí)驗(yàn)過程:

1.學(xué)習(xí)DES算法的三個(gè)步驟中的第二步:16輪的迭代運(yùn)算。

2.學(xué)習(xí)S盒替換 :首先輸入一個(gè)六位二進(jìn)制數(shù),把這個(gè)六位二進(jìn)制數(shù)的第一位和第六位提取出來組成二位二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制數(shù)作為S盒的行數(shù),接著把六位二進(jìn)制數(shù)的剩余第二位至第五位轉(zhuǎn)換為十進(jìn)制數(shù)作為S盒的列數(shù),最后通過行數(shù)和列數(shù)查找對(duì)應(yīng)S盒的數(shù)并轉(zhuǎn)換為四位二進(jìn)制數(shù)。

三、實(shí)驗(yàn)代碼及結(jié)果:

(1)實(shí)驗(yàn)代碼:

#include<iostream> using namespace std; int S1[4][16] = { {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} }; //S1盒數(shù)據(jù) int S2[4][16] = { {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} }; //S2盒數(shù)據(jù) //十進(jìn)制轉(zhuǎn)化為二進(jìn)制 void convert_10_to_2(int S) {//S為十進(jìn)制數(shù)int i; //i為十進(jìn)制轉(zhuǎn)換為二進(jìn)制的位數(shù)int p[1000]; //用數(shù)組p存儲(chǔ)的二進(jìn)制數(shù)for (i = 0; S != 0; i++) { //for循環(huán)將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)并用p存儲(chǔ)二進(jìn)制數(shù)p[i] = S % 2;S /= 2;} //如果十進(jìn)制轉(zhuǎn)換為二進(jìn)制結(jié)果不是四位數(shù),則在二進(jìn)制數(shù)前加0int q = i;while (4 - q) {cout<<0;q++;} for (int t = i - 1; t >= 0; t--) {//倒循環(huán)輸出二進(jìn)制數(shù)cout << p[t];} } //二進(jìn)制轉(zhuǎn)化為十進(jìn)制 int convert_2_to_10(int x) {//x為二進(jìn)制數(shù)int s = 0;//s為二進(jìn)制轉(zhuǎn)換后的十進(jìn)制數(shù)int t = 1;while (x) {//while循環(huán)使十進(jìn)制轉(zhuǎn)換為二進(jìn)制s += x % 10 * t;t *= 2;x /= 10;}return s;//返回十進(jìn)制數(shù)s } int main() {int s; cout << "請(qǐng)輸入一個(gè)六位二進(jìn)制數(shù):"; cin >> s;//s為輸入的六位二進(jìn)制數(shù)int b1 = s % 10, b6 = s / 100000;//b1為六位二進(jìn)制數(shù)的第一位數(shù),b6為六位二進(jìn)制數(shù)的第六位數(shù)int b25 = s / 10 % 10000;//b25為六位二進(jìn)制數(shù)的2-5位數(shù)int n = b1 * 2 + b6;//n表示為S盒的行數(shù)int m = convert_2_to_10(b25);//m表示為S盒的列數(shù) string Str;//Str為選擇的S1盒還是S2盒cout << "請(qǐng)選擇S1盒還是S2盒:" ;cin >> Str;if (Str == "S1")//如果選擇S1盒輸出相對(duì)應(yīng)的二進(jìn)制數(shù){printf("S1[%d][%d] =%d\n", n, m, S1[n][m]);printf("%d轉(zhuǎn)換為二進(jìn)制數(shù)為", S1[n][m]);convert_10_to_2(S1[n][m]);}//如果選擇S2盒輸出對(duì)應(yīng)的二進(jìn)制數(shù)else if(Str == "S2"){printf("S2[%d][%d] = %d\n", n, m,S2[n][m]);printf("%d轉(zhuǎn)換為二進(jìn)制數(shù)為", S2[n][m]);convert_10_to_2(S2[n][m]);}return 0; }

(2)實(shí)驗(yàn)結(jié)果:

?

總結(jié)

以上是生活随笔為你收集整理的DES算法实现S盒替换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。