Dart Encryption

Dart Encryption

Dart is the language behind Flutter: one codebase for mobile, web, and desktop UI. Compilation to JavaScript and native snapshots means your strings land in bundles users can unpack. The tooling is slick; the attack surface is still “everything ships to the client.”

Firebase keys, analytics IDs, and deep-link secrets often get checked into the repo as plain constants. StringEncrypt gives you Dart that rehydrates those values at runtime so a strings pass over the release artefact is less boring.

String encryption supports both UNICODE and ANSI strings.

Official resources:

Dart Encryption (UNICODE Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Dart]
// myString = "StringEncrypt sample"
String myString = '\u{5301}\u{7542}\u{01BE}\u{B733}\u{4AF1}\u{3315}\u{DC79}\u{B571}' +
                  '\u{1054}\u{411C}\u{B562}\u{9D06}\u{5CBF}\u{7E61}\u{0E9A}\u{DA4C}' +
                  '\u{5D31}\u{E4B4}\u{66FE}\u{D238}';

for (int NzdtR = 0, SqtYV = 0; NzdtR < 20; NzdtR++)
{
	SqtYV = (myString.codeUnitAt(NzdtR));
	for (int iSuFp = 0; iSuFp < 4; iSuFp++)
	{
		for (int QbtNe = 0; QbtNe < 4; QbtNe++)
		{
			for (int CIuyw = 0; CIuyw < 4; CIuyw++)
			{
				SqtYV = (((SqtYV & 0xFFFF) >> (NzdtR % 16)) | ((SqtYV & 0xFFFF) << (16 - (NzdtR % 16)))) & 0xFFFF;
				SqtYV = (SqtYV ^ 0xFFFF) & 0xFFFF;
				SqtYV = ((SqtYV & 0xFFFF) - 0xEEC1) & 0xFFFF;
			}
		}
		SqtYV = (((SqtYV & 0xFFFF) >> (NzdtR % 16)) | ((SqtYV & 0xFFFF) << (16 - (NzdtR % 16)))) & 0xFFFF;
		SqtYV = ((SqtYV & 0xFFFF) - NzdtR) & 0xFFFF;
	}
	for (int USxBn = 0; USxBn < 2; USxBn++)
	{
		SqtYV = (SqtYV ^ ((SqtYV & 0xFFFF) >> 9)) & 0xFFFF;
	}
	SqtYV = (SqtYV ^ NzdtR) & 0xFFFF;
	SqtYV = ((SqtYV & 0xFFFF) + NzdtR) & 0xFFFF;
	SqtYV = ((SqtYV & 0xFFFF) - 1) & 0xFFFF;
	SqtYV = ((SqtYV & 0xFFFF) + NzdtR) & 0xFFFF;
	SqtYV = (((SqtYV & 0xFFFF) << (NzdtR % 16)) | ((SqtYV & 0xFFFF) >> (16 - (NzdtR % 16)))) & 0xFFFF;
	SqtYV = (((SqtYV & 0xFFFF) >> 8) | ((SqtYV & 0xFFFF) << 8)) & 0xFFFF;
	SqtYV = ((SqtYV & 0xFFFF) + NzdtR) & 0xFFFF;
	// TODO: immutable String; use StringBuffer or runes for production
	myString = myString.substring(0, NzdtR) + String.fromCharCode(SqtYV & 0xFFFF) + myString.substring(NzdtR + 1);
}

Dart Encryption (ANSI Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Dart]
// myString = "StringEncrypt sample"
String myString = '\xC2\x42\xE0\x0B\x0C\xB9\xC8\xC5\xBE\x0B\x53\x10\x4C\x93\x91\xBE' +
                  '\xF5\x90\x26\xA9';

for (int eoStj = 0, fPyDV = 0; eoStj < 20; eoStj++)
{
	fPyDV = (myString.codeUnitAt(eoStj));
	for (int NDzeu = 0; NDzeu < 3; NDzeu++)
	{
		for (int eKpgo = 0; eKpgo < 3; eKpgo++)
		{
			fPyDV = ((fPyDV & 0xFF) + eoStj) & 0xFF;
			fPyDV = (fPyDV ^ eoStj) & 0xFF;
		}
		for (int yPwgZ = 0; yPwgZ < 2; yPwgZ++)
		{
			fPyDV = (((~(fPyDV & 0xFF)) & 0xFF) + 1) & 0xFF;
			for (int FagdT = 0; FagdT < 2; FagdT++)
			{
				fPyDV = (((fPyDV & 0xFF) >> (eoStj % 8)) | ((fPyDV & 0xFF) << (8 - (eoStj % 8)))) & 0xFF;
				fPyDV = (fPyDV ^ eoStj) & 0xFF;
				fPyDV = (((fPyDV & 0xFF) >> (eoStj % 8)) | ((fPyDV & 0xFF) << (8 - (eoStj % 8)))) & 0xFF;
			}
		}
		fPyDV = ((fPyDV & 0xFF) + eoStj) & 0xFF;
	}
	for (int qDIta = 0; qDIta < 2; qDIta++)
	{
		fPyDV = ((fPyDV & 0xFF) + 0xFC) & 0xFF;
		fPyDV = (((fPyDV & 0xFF) << (eoStj % 8)) | ((fPyDV & 0xFF) >> (8 - (eoStj % 8)))) & 0xFF;
	}
	fPyDV = (fPyDV ^ ((fPyDV & 0xFF) >> 5)) & 0xFF;
	for (int MZLQY = 0; MZLQY < 2; MZLQY++)
	{
		for (int EUVLd = 0; EUVLd < 2; EUVLd++)
		{
			fPyDV = ((fPyDV & 0xFF) - 0x46) & 0xFF;
			fPyDV = (fPyDV ^ 0x03) & 0xFF;
		}
		fPyDV = ((fPyDV & 0xFF) - 1) & 0xFF;
	}
	for (int qMDPn = 0; qMDPn < 2; qMDPn++)
	{
		for (int zUrXZ = 0; zUrXZ < 4; zUrXZ++)
		{
			fPyDV = (((fPyDV & 0xFF) >> (eoStj % 8)) | ((fPyDV & 0xFF) << (8 - (eoStj % 8)))) & 0xFF;
			fPyDV = (((~(fPyDV & 0xFF)) & 0xFF) + 1) & 0xFF;
			for (int zTdLB = 0; zTdLB < 2; zTdLB++)
			{
				fPyDV = (fPyDV ^ 0xFF) & 0xFF;
			}
		}
		for (int MbIRS = 0; MbIRS < 4; MbIRS++)
		{
			fPyDV = (fPyDV ^ ((fPyDV & 0xFF) >> 6)) & 0xFF;
			fPyDV = (((~(fPyDV & 0xFF)) & 0xFF) + 1) & 0xFF;
			for (int tAdRC = 0; tAdRC < 4; tAdRC++)
			{
				fPyDV = ((fPyDV & 0xFF) - 1) & 0xFF;
				fPyDV = (fPyDV ^ (((fPyDV & 0xFF) << 7) & 0xFF)) & 0xFF;
				fPyDV = (((fPyDV & 0xFF) >> 1) | ((fPyDV & 0xFF) << 7)) & 0xFF;
			}
		}
		fPyDV = (((fPyDV & 0xFF) >> 4) | ((fPyDV & 0xFF) << 4)) & 0xFF;
	}
	fPyDV = (fPyDV ^ ((fPyDV & 0xFF) >> 4)) & 0xFF;
	for (int uNqtP = 0; uNqtP < 3; uNqtP++)
	{
		fPyDV = (((fPyDV & 0xFF) >> 4) | ((fPyDV & 0xFF) << 4)) & 0xFF;
	}
	fPyDV = (((fPyDV & 0xFF) << 1) | ((fPyDV & 0xFF) >> 7)) & 0xFF;
	for (int SpHsG = 0; SpHsG < 2; SpHsG++)
	{
		fPyDV = (fPyDV ^ (((fPyDV & 0xFF) << 4) & 0xFF)) & 0xFF;
	}
	// TODO: immutable String; use StringBuffer or runes for production
	myString = myString.substring(0, eoStj) + String.fromCharCode(fPyDV & 0xFF) + myString.substring(eoStj + 1);
}