Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "main.h"
- vector<vector<int>> nKeyMatrix = {
- { 1, 4, 8 },
- { 3, 7, 2 },
- { 6, 9, 5 }
- };
- //string sAlphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
- string sAlphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
- string sWord = "Habaca";
- vector<int> viCryptedWord;
- int main()
- {
- cout << "AnalyticCrypt v0.1" << endl << endl; //Вывод названия программы
- //////////////////////////////////////////////////////////////////////////
- cout << "Encryption word: " << sWord << endl;
- cout << "Key-Matrix: " << endl;
- vPrintMatrix(nKeyMatrix);
- vector<int> WordNumericEquivalent = nWordNumericEquivalent(sWord);
- cout << "Numeric equivalent of word \"" << sWord << "\" - ";
- for (int i = 0; i < WordNumericEquivalent.size(); i++)
- cout << WordNumericEquivalent[i] << ", ";
- cout << endl;
- int nFullVectors = WordNumericEquivalent.size() % nKeyMatrix.size();
- if (nFullVectors != 0)
- {
- cout << "!!!!!\n";
- cout << "Warning. Vector will be added with zeros." << endl;
- for (int i = nFullVectors; i < nKeyMatrix.size(); i++)
- WordNumericEquivalent.push_back(0);
- cout << "Now the numeric equivalent will look like this:" << endl;
- for (int i = 0; i < WordNumericEquivalent.size(); i++)
- cout << WordNumericEquivalent[i] << ", ";
- cout << endl;
- cout << "!!!!!\n";
- }
- cout << "Getting vectors:" << endl;
- for (int i = 0; i < WordNumericEquivalent.size() / nKeyMatrix.size(); i++)
- {
- cout << "B" << i + 1 << "={";
- for (int j = 0; j < nKeyMatrix.size(); j++)
- {
- cout << WordNumericEquivalent[(i * nKeyMatrix.size()) + j];
- if (j + 1 != nKeyMatrix.size()) cout << ", ";
- }
- cout << "}" << endl;
- }
- vector<int> CryptedWord;
- for(int a = 0; a < WordNumericEquivalent.size(); a++)
- CryptedWord.push_back(0);
- for(int j = 0; j < WordNumericEquivalent.size() / nKeyMatrix.size(); j++)
- {
- vector<int> viTempMatrix;
- for(int i = 0; i < nKeyMatrix.size(); i++)
- viTempMatrix.push_back(WordNumericEquivalent[(j * nKeyMatrix.size()) + i]);
- vector<int> multip = viMatrixMultiplication(nKeyMatrix, viTempMatrix);
- for(int io = 0; io < viTempMatrix.size(); io++)
- CryptedWord[(j * nKeyMatrix.size()) + io] = multip[io];
- asm("nop");
- }
- cout << "Encrypted word:\n";
- for(int i = 0; i < CryptedWord.size(); i++)
- cout << CryptedWord[i] << " ";
- cout << endl;
- //////////////////////////////////////////////////////////////////////////
- return 0;
- }
- void vPrintMatrix(vector<vector<int>>& matrix)
- {
- for (int i = 0; i < matrix.size(); i++)
- {
- for (int j = 0; j < matrix[0].size(); j++)
- cout << /* setiosflags(ios::left) << */ setw(3) << matrix[i][j];
- cout << endl;
- }
- }
- //Перемножение матриц
- vector<int> viMatrixMultiplication(vector<vector<int>> vviFullMatrix, vector<int>MatrixM)
- {
- vector<int> viTemp;
- for(int i = 0; i < vviFullMatrix.size(); i++)
- viTemp.push_back(0);
- if (vviFullMatrix.size() != MatrixM.size())
- {
- cout << "Error! Can't multiplicand those matrix!" << endl;
- return viTemp;
- }
- for(int i = 0; i < vviFullMatrix.size(); i++)
- {
- for(int j = 0; j < vviFullMatrix.size(); j++)
- viTemp[i] += vviFullMatrix[i][j] * MatrixM[j];
- }
- return viTemp;
- }
- vector<int> nWordNumericEquivalent(string& sWord)
- {
- vector<int> viTemp;
- for (int i = 0; i < sWord.length(); i++)
- viTemp.push_back(nSearchChar(sAlphabet, sWord[i]));
- return viTemp;
- }
- int nSearchChar(string& sAlphabet, char ch)
- {
- int nPos;
- for (nPos = 0; nPos < sAlphabet.length(); nPos++)
- if (ch == sAlphabet[nPos]) break;
- /*if (nPos > 32) nPos -= 32;*/
- if (nPos > 25) nPos -= 25;
- else nPos++;
- return nPos;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement