演算法題破解
1. DES中S盒演算法——解題
在密碼學中,S盒(Substitution-box)是對稱密鑰演算法執行置換計算的基本結構。S盒用在分組密碼演算法中,是唯一的非線性結構,其S盒的指標的好壞直接決定了密碼演算法的好壞。 ——網路
S盒有8個盒子,下表是DES演算法中S4盒的選擇矩陣,如果其輸入為101011,求輸出結果。
解:已知輸入為101011
(1)、取頭尾11,進行二進制轉換為十進制為3,表示取表格的第3行
(2)、然後中間0101,進行二進制轉換為十進制為5,表示取表格的第五列
(3)、(3,5)對應表格中的數字是12,12轉換為二進制就是1100
答:如果該盒輸入為101011則輸出的結果為1100
2. 幫我解決一道C語言演算法的問題
這是一個最大子序列和問題。通常用動態規劃法解。至於動態規劃的數學模型,懶得去查了,直接給你找了一個演算法,你湊合看吧。
從整數序列頭部開始掃描,假設現掃描到的位置為i,求取從0到i所有元素的和sum[i],sum[i]取最大值的地方即為最大子序列的結束位置,設為a。從結束位置a向前掃描,找到第一個小於零的位置b,b+1就是最大子序列的開始位置。求從b+1到a位置的值即可得到最大子序列和。按此思路該演算法時間復雜度為O(m+n),其中m, n分別為最大子序列的長度、給定整數序列的長度。
改進:根據對上述演算法的進一步分析,可以知道,最大子序列和中必然不存在前綴子序列小於0的情況,於是設一ThisSum用於指示當前子序列和。改進演算法描述如下:從整數序列頭部開始掃描,累加序列元素和ThisSum,若ThisSum<0,則停止累加子序列和,將ThisSum清零,並從下一位置重新開始累加ThisSum,否則將ThisSum與當前MaxSum比較,並更新MaxSum。此改進演算法時間復雜度僅為O(n),n為給定整數序列的長度。
int MaxSubsequenceSum3(const int A[], int N)
{
int ThisSum, MaxSum, i;
ThisSum = MaxSum = 0;
for(i = 0; i < N; i++)
{
ThisSum += A[i];
if(ThisSum > MaxSum)
MaxSum = ThisSum;
else if(ThisSum < 0)
ThisSum = 0;
}
return MaxSum;
}
3. 異或演算法的密鑰破解,知道密文和明文 ,可以求密鑰嗎已知是異或加密的,寫個原理也好的。
可以。
比如:明文(如1111)⊕密鑰(如1001)得到密文(如0110)
然後拿密文(0110)⊕明文(1111)就得密鑰(1001)
