Go Encryption

Go Encryption

Go ships static binaries: one file per service, no interpreter on the target. That makes deploys simple and keeps performance predictable for cloud tooling, CLIs, and network daemons. The downside is your strings sit in the executable exactly where strings expects them.

JWT signing secrets, webhook HMAC keys, and internal service URLs are classic greppable mistakes. Feeding them through StringEncrypt and checking in the generated decrypt code hides the obvious literals while your program boots.

String encryption supports both UNICODE and ANSI strings.

Official resources:

Go Encryption (UNICODE Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Go]
// package main // TODO: adjust package path

import (
	"unicode/utf16"
)
// myString = "StringEncrypt sample"
var weJuc = [21]uint16{ 0xBC4F, 0xBB64, 0x8A2B, 0x16DA, 0xE400, 0x8077, 0xE698, 0x070D,
                        0xAE8D, 0x6D7D, 0xE93A, 0x7842, 0x8886, 0x0411, 0xC534, 0x3D07,
                        0xA36E, 0x4245, 0x677C, 0xB059, 0xC925 }

var QveMy uint16 = 0
for CrmjE := 0; CrmjE < 21; CrmjE++ {
	QveMy = uint16(weJuc[CrmjE])
	QveMy = (((QveMy & uint16(0xFFFF)) >> 9) | ((QveMy & uint16(0xFFFF)) << 7)) & uint16(0xFFFF)
	QveMy = (((QveMy & uint16(0xFFFF)) >> uint(CrmjE % 16)) | ((QveMy & uint16(0xFFFF)) << uint(16 - (CrmjE % 16)))) & uint16(0xFFFF)
	QveMy = ((QveMy & uint16(0xFFFF)) + uint16(0x138F)) & uint16(0xFFFF)
	QveMy = (QveMy ^ (((QveMy & uint16(0xFFFF)) << 13) & uint16(0xFFFF))) & uint16(0xFFFF)
	for jNXUc := 0; jNXUc < 3; jNXUc++ {
		QveMy = (QveMy ^ uint16(0xFFFF)) & uint16(0xFFFF)
		for vbgVZ := 0; vbgVZ < 2; vbgVZ++ {
			QveMy = ((QveMy & uint16(0xFFFF)) + uint16(CrmjE)) & uint16(0xFFFF)
			QveMy = ((QveMy & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
		}
	}
	QveMy = (QveMy ^ (((QveMy & uint16(0xFFFF)) << 10) & uint16(0xFFFF))) & uint16(0xFFFF)
	for mhZYk := 0; mhZYk < 3; mhZYk++ {
		QveMy = (((QveMy & uint16(0xFFFF)) >> 6) | ((QveMy & uint16(0xFFFF)) << 10)) & uint16(0xFFFF)
		for qoReQ := 0; qoReQ < 4; qoReQ++ {
			QveMy = ((^(QveMy & uint16(0xFFFF)) & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
			for xCQea := 0; xCQea < 4; xCQea++ {
				QveMy = ((QveMy & uint16(0xFFFF)) + uint16(CrmjE)) & uint16(0xFFFF)
			}
			for SDEUP := 0; SDEUP < 2; SDEUP++ {
				QveMy = ((^(QveMy & uint16(0xFFFF)) & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
				QveMy = ((QveMy & uint16(0xFFFF)) + uint16(0x71F8)) & uint16(0xFFFF)
				QveMy = (QveMy ^ uint16(0x4E75)) & uint16(0xFFFF)
			}
		}
		QveMy = (((QveMy & uint16(0xFFFF)) >> 7) | ((QveMy & uint16(0xFFFF)) << 9)) & uint16(0xFFFF)
	}
	for vAayE := 0; vAayE < 4; vAayE++ {
		for kpJtr := 0; kpJtr < 4; kpJtr++ {
			QveMy = ((QveMy & uint16(0xFFFF)) - uint16(0xD1D3)) & uint16(0xFFFF)
			for gTXSO := 0; gTXSO < 2; gTXSO++ {
				QveMy = (((QveMy & uint16(0xFFFF)) >> 11) | ((QveMy & uint16(0xFFFF)) << 5)) & uint16(0xFFFF)
			}
		}
	}
	QveMy = (((QveMy & uint16(0xFFFF)) >> 8) | ((QveMy & uint16(0xFFFF)) << 8)) & uint16(0xFFFF)
	weJuc[CrmjE] = uint16(QveMy)
}
myString := string(utf16.Decode(weJuc[:]))

Go Encryption (ANSI Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Go]
// package main // TODO: adjust package path
// myString = "StringEncrypt sample"
var wvHxY = [21]byte{ 0x24, 0x1C, 0x3C, 0x66, 0xEA, 0xC3, 0x0C, 0x1D,
                      0xCF, 0x95, 0x86, 0x40, 0xFF, 0xEE, 0xD5, 0x8E,
                      0x3D, 0x62, 0x91, 0x47, 0x2B }

var IehNX byte = 0
for BAzKg := 0; BAzKg < 21; BAzKg++ {
	IehNX = byte(wvHxY[BAzKg])
	for UzMxj := 0; UzMxj < 3; UzMxj++ {
		for rSWED := 0; rSWED < 2; rSWED++ {
			IehNX = (((IehNX & byte(0xFF)) << uint(BAzKg % 8)) | ((IehNX & byte(0xFF)) >> uint(8 - (BAzKg % 8)))) & byte(0xFF)
			IehNX = (IehNX ^ byte(0xFF)) & byte(0xFF)
		}
		for FxIvo := 0; FxIvo < 3; FxIvo++ {
			IehNX = ((IehNX & byte(0xFF)) - byte(1)) & byte(0xFF)
			IehNX = (IehNX ^ byte(0xFF)) & byte(0xFF)
		}
		IehNX = ((IehNX & byte(0xFF)) + byte(1)) & byte(0xFF)
	}
	for IVPoh := 0; IVPoh < 3; IVPoh++ {
		for BCEaw := 0; BCEaw < 4; BCEaw++ {
			IehNX = (((IehNX & byte(0xFF)) >> uint(BAzKg % 8)) | ((IehNX & byte(0xFF)) << uint(8 - (BAzKg % 8)))) & byte(0xFF)
			IehNX = ((^(IehNX & byte(0xFF)) & byte(0xFF)) + byte(1)) & byte(0xFF)
		}
		IehNX = ((IehNX & byte(0xFF)) + byte(0x7E)) & byte(0xFF)
		IehNX = (((IehNX & byte(0xFF)) >> 3) | ((IehNX & byte(0xFF)) << 5)) & byte(0xFF)
	}
	for RLtPQ := 0; RLtPQ < 2; RLtPQ++ {
		IehNX = ((IehNX & byte(0xFF)) + byte(0xA3)) & byte(0xFF)
		for QulCb := 0; QulCb < 4; QulCb++ {
			IehNX = ((IehNX & byte(0xFF)) + byte(BAzKg)) & byte(0xFF)
			IehNX = (IehNX ^ ((IehNX & byte(0xFF)) >> 4)) & byte(0xFF)
			IehNX = (IehNX ^ byte(BAzKg)) & byte(0xFF)
		}
	}
	for KCRcO := 0; KCRcO < 3; KCRcO++ {
		for gLdAz := 0; gLdAz < 4; gLdAz++ {
			IehNX = ((^(IehNX & byte(0xFF)) & byte(0xFF)) + byte(1)) & byte(0xFF)
			IehNX = (IehNX ^ (((IehNX & byte(0xFF)) << 7) & byte(0xFF))) & byte(0xFF)
		}
		for slvJA := 0; slvJA < 2; slvJA++ {
			IehNX = (((IehNX & byte(0xFF)) >> 1) | ((IehNX & byte(0xFF)) << 7)) & byte(0xFF)
		}
		for laAsk := 0; laAsk < 4; laAsk++ {
			IehNX = (((IehNX & byte(0xFF)) << uint(BAzKg % 8)) | ((IehNX & byte(0xFF)) >> uint(8 - (BAzKg % 8)))) & byte(0xFF)
			IehNX = (IehNX ^ (((IehNX & byte(0xFF)) << 6) & byte(0xFF))) & byte(0xFF)
			for mnUIx := 0; mnUIx < 3; mnUIx++ {
				IehNX = (((IehNX & byte(0xFF)) << 6) | ((IehNX & byte(0xFF)) >> 2)) & byte(0xFF)
				IehNX = ((IehNX & byte(0xFF)) - byte(BAzKg)) & byte(0xFF)
			}
		}
	}
	IehNX = (((IehNX & byte(0xFF)) >> 5) | ((IehNX & byte(0xFF)) << 3)) & byte(0xFF)
	IehNX = ((^(IehNX & byte(0xFF)) & byte(0xFF)) + byte(1)) & byte(0xFF)
	for zqyQr := 0; zqyQr < 4; zqyQr++ {
		IehNX = (((IehNX & byte(0xFF)) >> uint(BAzKg % 8)) | ((IehNX & byte(0xFF)) << uint(8 - (BAzKg % 8)))) & byte(0xFF)
	}
	IehNX = ((IehNX & byte(0xFF)) + byte(BAzKg)) & byte(0xFF)
	IehNX = (((IehNX & byte(0xFF)) >> 4) | ((IehNX & byte(0xFF)) << 4)) & byte(0xFF)
	IehNX = ((^(IehNX & byte(0xFF)) & byte(0xFF)) + byte(1)) & byte(0xFF)
	wvHxY[BAzKg] = byte(IehNX)
}
myString := string(wvHxY[:]))