Hash with Matrix
The following example demonstrates how to hash customer data with the TEAgentMatrix class.
Code Sample
See the C++ environment settings for details on setting the project environment.
<cpp_matrix_hash.cpp>
/*****************************************************************************************
* c++_matrix_hash.cpp
*
* Use TEAgentMatrix for data hashing.
*
* No TE connection is needed for data hashing.
*
******************************************************************************************/
#include <iostream>
#include "teconnection.h"
#include "teagent.h"
#include "teexception.h"
using namespace ERUCES;
using namespace std;
int main()
{
string strServerName = "localhost"; // server name
long lPort = 8888; // port number
string strUsername = "ls"; // username
string strPassword = "password"; // password
try
{
// Create TEAgentMatrix object
TEAgentMatrix matrix;
// Original data for encryption
string str1_1 = "test string (1, 1)";
string str1_2 = "test string (1, 2)";
string str2_1 = "test string (2, 1)";
string str2_2 = "test string (2, 2)";
string str2_3 = "test string (2, 3)";
string str3_1 = "test string (3, 1)";
// Set matrix for encryption
matrix.setElement(1, 1, str1_1); // set element (1, 1)
matrix.setElement(1, 2, str1_2);
matrix.setElement(2, 1, str2_1); // set element (2, 1)
matrix.setElement(2, 2, str2_2);
matrix.setElement(2, 3, str2_3);
matrix.setElement(3, 1, str3_1); // set element (3, 1)
printf("Original data:\n");
cout << "Original data:\n";
cout << str1_1 << ", " << str1_2 << endl;
cout << str2_1 << ", " << str2_2 << ", " << str2_3 << endl;
cout << str3_1 << endl;
// Decide which column to hash, and set the salts for them
TEUINT2STR s1(make_pair((uint32_t)1, string("this is a salt"))); // set salt for first column
TEUINT2STR s3(make_pair((uint32_t)3, string("this is another salt"))); // set salt for third column
TEObjectContainer container;
container.add(&s1);
container.add(&s3);
matrix.setHashColumns(container);
string strHash1_1;
string strHash2_1;
string strHash3_1;
string strHash2_3;
// Get the hash values
matrix.setEncodeMode(true);
matrix.getHashElement(1, 1, strHash1_1);
matrix.getHashElement(2, 1, strHash2_1);
matrix.getHashElement(3, 1, strHash3_1);
matrix.getHashElement(2, 3, strHash2_3);
cout << "\nHashed values of first column:\n";
cout << strHash1_1 << endl;
cout << strHash2_1 << endl;
cout << strHash3_1 << endl;
cout << "\nHashed values of third column:\n";
cout << strHash2_3 << endl;
// Show salts used
matrix.getHashColumns(container);
cout << "\nSalt used:\n";
for (int i=0; i<container.size(); i++)
{
const TEUINT2STR* salt = static_cast<const TEUINT2STR*>(container[i]);
cout << "Column Number: " << salt->getValue().first
<< ", Salt: " << salt->getValue().second << endl;
}
}
catch (TEException &e)
{
cout << e.getAllMessages() << endl;
}
catch (...)
{
cout << "Unexpected error" << endl;
}
return 0;
}
Output
Original data:
Original data:
test string (1, 1), test string (1, 2)
test string (2, 1), test string (2, 2), test string (2, 3)
test string (3, 1)
Hashed values of first column:
wi65162gbHYtUwQKkMq7hjbc8IA=
Jn24Viu/iNehAruztmz0Whx07Ww=
qxcqAHM5CoiXXgntGYDAt7eoAh4=
Hashed values of third column:
VMLqMRKz2hOjiD81ZYw4NLRN5pE=
Salt used:
Column Number: 1, Salt: this is a salt
Column Number: 3, Salt: this is another salt