C/C++ Encryption

C/C++ Encryption

C and C++ still underpin most native software: operating systems, game engines, browsers, drivers, and anything that needs tight control over memory and CPU. Builds ship as plain executables or libraries, often with no virtual machine in the middle. That keeps the pair relevant from microcontrollers to large server apps.

Those binaries are easy to skim with a hex dump or a strings tool—URLs, licence keys, and internal API names show up in seconds. Encrypting sensitive literals and pasting in StringEncrypt output means your secrets live as scrambled data until your own decrypt routine runs.

String encryption supports both UNICODE (wchar_t type) and ANSI (char type) strings.

You can read about different encodings of C/C++ strings at:

By default all C and C++ strings are null terminated.

C/C++ encryption (UNICODE Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [C/C++]
// myString = "StringEncrypt sample"
wchar_t myString[21] = { 0x6359, 0xA315, 0xA8E4, 0x9163, 0x7D93, 0x63A9, 0x6316, 0x14EA,
                         0xCAE3, 0x77E3, 0x62BB, 0x6339, 0xD4ED, 0x80E3, 0x8BE3, 0x616B,
                         0x634F, 0xA312, 0x40E4, 0x9B63, 0xE5A6 };

for (volatile unsigned int IOpbA = 0, OZFUu = 0; IOpbA < 21; IOpbA++)
{
	OZFUu = myString[IOpbA];
	for (unsigned int fVdNO = 0; fVdNO < 2; fVdNO++)
	{
		OZFUu = (((~(OZFUu & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
		OZFUu = (OZFUu ^ (((OZFUu & 0xFFFF) << 14) & 0xFFFF)) & 0xFFFF;
	}
	OZFUu = (OZFUu ^ 0xB018) & 0xFFFF;
	for (unsigned int xJjUl = 0; xJjUl < 3; xJjUl++)
	{
		for (unsigned int FSXVK = 0; FSXVK < 2; FSXVK++)
		{
			OZFUu = (OZFUu ^ ((OZFUu & 0xFFFF) >> 12)) & 0xFFFF;
			OZFUu = ((OZFUu ^ 0xFFFF) & 0xFFFF);
		}
	}
	OZFUu = (((~(OZFUu & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
	OZFUu = (OZFUu ^ 0xC0FA) & 0xFFFF;
	OZFUu = ((OZFUu & 0xFFFF) - 0x6BF6) & 0xFFFF;
	OZFUu = ((OZFUu ^ 0xFFFF) & 0xFFFF);
	for (unsigned int UopBi = 0; UopBi < 3; UopBi++)
	{
		OZFUu = (((OZFUu & 0xFFFF) << (IOpbA % 16)) | ((OZFUu & 0xFFFF) >> (16 - (IOpbA % 16)))) & 0xFFFF;
	}
	OZFUu = ((OZFUu ^ 0xFFFF) & 0xFFFF);
	for (unsigned int msKAE = 0; msKAE < 2; msKAE++)
	{
		for (unsigned int MbYEv = 0; MbYEv < 4; MbYEv++)
		{
			OZFUu = ((OZFUu & 0xFFFF) + 1) & 0xFFFF;
			OZFUu = ((OZFUu & 0xFFFF) + 0x3C80) & 0xFFFF;
			OZFUu = ((OZFUu ^ 0xFFFF) & 0xFFFF);
		}
	}
	OZFUu = ((OZFUu & 0xFFFF) + IOpbA) & 0xFFFF;
	OZFUu = ((OZFUu & 0xFFFF) + 1) & 0xFFFF;
	myString[IOpbA] = OZFUu;
}

C/C++ encryption (ANSI Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [C/C++]
// myString = "StringEncrypt sample"
unsigned char myString[21] = { 0x38, 0x92, 0x85, 0x46, 0x2C, 0xE6, 0xBF, 0x26,
                               0x64, 0xD2, 0x8F, 0x00, 0x66, 0x7B, 0x2F, 0x04,
                               0x33, 0x8A, 0x78, 0xCF, 0xB6 };

for (volatile unsigned int NuxjI = 0, lnMIA = 0; NuxjI < 21; NuxjI++)
{
	lnMIA = myString[NuxjI];
	for (unsigned int dmQyg = 0; dmQyg < 4; dmQyg++)
	{
		lnMIA = (((lnMIA & 0xFF) >> 4) | ((lnMIA & 0xFF) << 4)) & 0xFF;
		lnMIA = ((lnMIA & 0xFF) + NuxjI) & 0xFF;
		lnMIA = ((lnMIA ^ 0xFF) & 0xFF);
	}
	lnMIA = (((~(lnMIA & 0xFF)) & 0xFF) + 1) & 0xFF;
	lnMIA = ((lnMIA ^ 0xFF) & 0xFF);
	for (unsigned int wEWNU = 0; wEWNU < 2; wEWNU++)
	{
		lnMIA = ((lnMIA & 0xFF) - 0x62) & 0xFF;
		for (unsigned int yzuIY = 0; yzuIY < 3; yzuIY++)
		{
			for (unsigned int bCnEu = 0; bCnEu < 4; bCnEu++)
			{
				lnMIA = (lnMIA ^ NuxjI) & 0xFF;
				lnMIA = ((lnMIA & 0xFF) + 1) & 0xFF;
				lnMIA = (lnMIA ^ 0xD8) & 0xFF;
			}
		}
		for (unsigned int RpkwX = 0; RpkwX < 3; RpkwX++)
		{
			lnMIA = ((lnMIA & 0xFF) + 0x17) & 0xFF;
			lnMIA = (((lnMIA & 0xFF) >> 4) | ((lnMIA & 0xFF) << 4)) & 0xFF;
		}
	}
	for (unsigned int bBfXp = 0; bBfXp < 2; bBfXp++)
	{
		lnMIA = (lnMIA ^ 0x0D) & 0xFF;
	}
	lnMIA = ((lnMIA & 0xFF) - 1) & 0xFF;
	for (unsigned int mLhPK = 0; mLhPK < 2; mLhPK++)
	{
		for (unsigned int Wwpsn = 0; Wwpsn < 3; Wwpsn++)
		{
			lnMIA = ((lnMIA & 0xFF) - 0x8A) & 0xFF;
			lnMIA = (((lnMIA & 0xFF) >> 4) | ((lnMIA & 0xFF) << 4)) & 0xFF;
			lnMIA = (lnMIA ^ ((lnMIA & 0xFF) >> 4)) & 0xFF;
		}
		lnMIA = ((lnMIA & 0xFF) - 1) & 0xFF;
	}
	lnMIA = (((~(lnMIA & 0xFF)) & 0xFF) + 1) & 0xFF;
	lnMIA = ((lnMIA & 0xFF) - 0xE0) & 0xFF;
	myString[NuxjI] = lnMIA;
}