DES算法实现S盒替换
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                DES算法实现S盒替换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                一、實驗目的:
理解DES算法并掌握S盒替換原理,用代碼實現S盒替換。
二、實驗過程:
1.學習DES算法的三個步驟中的第二步:16輪的迭代運算。
2.學習S盒替換 :首先輸入一個六位二進制數,把這個六位二進制數的第一位和第六位提取出來組成二位二進制數并轉換為十進制數作為S盒的行數,接著把六位二進制數的剩余第二位至第五位轉換為十進制數作為S盒的列數,最后通過行數和列數查找對應S盒的數并轉換為四位二進制數。
三、實驗代碼及結果:
(1)實驗代碼:
#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盒數據 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盒數據 //十進制轉化為二進制 void convert_10_to_2(int S) {//S為十進制數int i; //i為十進制轉換為二進制的位數int p[1000]; //用數組p存儲的二進制數for (i = 0; S != 0; i++) { //for循環將十進制數轉換為二進制數并用p存儲二進制數p[i] = S % 2;S /= 2;} //如果十進制轉換為二進制結果不是四位數,則在二進制數前加0int q = i;while (4 - q) {cout<<0;q++;} for (int t = i - 1; t >= 0; t--) {//倒循環輸出二進制數cout << p[t];} } //二進制轉化為十進制 int convert_2_to_10(int x) {//x為二進制數int s = 0;//s為二進制轉換后的十進制數int t = 1;while (x) {//while循環使十進制轉換為二進制s += x % 10 * t;t *= 2;x /= 10;}return s;//返回十進制數s } int main() {int s; cout << "請輸入一個六位二進制數:"; cin >> s;//s為輸入的六位二進制數int b1 = s % 10, b6 = s / 100000;//b1為六位二進制數的第一位數,b6為六位二進制數的第六位數int b25 = s / 10 % 10000;//b25為六位二進制數的2-5位數int n = b1 * 2 + b6;//n表示為S盒的行數int m = convert_2_to_10(b25);//m表示為S盒的列數 string Str;//Str為選擇的S1盒還是S2盒cout << "請選擇S1盒還是S2盒:" ;cin >> Str;if (Str == "S1")//如果選擇S1盒輸出相對應的二進制數{printf("S1[%d][%d] =%d\n", n, m, S1[n][m]);printf("%d轉換為二進制數為", S1[n][m]);convert_10_to_2(S1[n][m]);}//如果選擇S2盒輸出對應的二進制數else if(Str == "S2"){printf("S2[%d][%d] = %d\n", n, m,S2[n][m]);printf("%d轉換為二進制數為", S2[n][m]);convert_10_to_2(S2[n][m]);}return 0; }(2)實驗結果:
?
總結
以上是生活随笔為你收集整理的DES算法实现S盒替换的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Java异常继承层次图
- 下一篇: 归一化频率问题
