大數相乘,就是指數字比較大,相乘的結果超出了基本型別的表示範圍,通常將其儲存在乙個字串中來計算。
所以這樣的數不能夠直接做乘法運算。
在學習密碼學的過程中,當從使用者介面接受的資料字串cstring無法使用atoi或atol轉化為對應的數字時,就需要使用大數乘法。
原理:1,兩個字元陣列儲存str1和str2的值。
2,由於兩數相乘後結果位數最多為len1+len2.則可以設定乙個陣列result[len1+len2]來儲存結果;
3,result[0]預留出來。相乘之後,暫時儲存結果result的每一位的數字,不做進製處理。result每一位上的數字result[i+j+1] = str1[i]*str[j].
4,從後往前遍歷,判斷是否需要進製。
**實現
#include #include #include char* bignummul(const char* str_1, const char* str_2, char* result)
//從最後一位往前判斷是否進製。
for (i = len-1; i >= 0; --i)
result[i] += '0';
} if ('0' == result[0])//如果第乙個字元為0,將所有字元往前移一位
memmove(result, result+1, len);
return result;
}void test()
;//儲存number1
char str_2[1024] = ;//儲存number2
char result[1025] = ;//儲存result
printf("輸入number1:");
scanf("%s", str_1);
printf("輸入number2:");
scanf("%s", str_2);
//大數乘法
bignummul(str_1, str_2, result);
//輸出結果
printf("result = %s\n", result);
}
int main()
while (getchar() != eof);
return 0;
}
附上其他大數運算:
大數減法:
大數加法:
密碼學 密碼學基礎
密碼學是研究編制密碼和破譯密碼的技術科學。密碼學的安全目標至少包含三個方面 保密性 完整性 可用性。完整性 資源只有授權方以授權的方式進行修改,所有資源沒有授權則不能修改。可用性 資源只有在適當的時候被授權方訪問,並按需求使用。密碼系統由5部分組成 1 明文空間m 全體明文的集合 2 密文空間c 全...
密碼學 柵欄密碼
使用的時候通過設定解密的偏移量不一樣的話,會得出不同的解碼內容 一直設定不同的偏移位數 直到找到帶有cyberpeace 開頭的解碼內容 偏移量也就是分組的數字長度 一般就是flag了 有時候它也會全部的解碼都沒有flag的標誌,這時候一定仔細看題目給出的條件 還有的情況就是在題目裡面它會提示給你數...
密碼學 密碼學中幾種攻擊模式
本科畢業設計做完之後,一直覺得自己需要系統來學習一下密碼學,密碼學是乙個古老的學科,前人已經研究了太多太多,而伴隨著量子計算的逐漸發展,之前制定出來的密碼演算法都面臨著被淘汰的危險。今天記錄一下根據密碼分析者知道資訊的多少,密碼學中分為常見的幾種攻擊模式,以及它們主要用於什麼場合。在介紹攻擊模式之前...