I'm trying to use openGL 4.3 and glsl (not clsl) to make a simple compute shader to perform bitwise operations on strings, with the eventual goal of making a block cipher. For now I'd be happy XORing two strings with each other.

It is not going well, I'm fairly sure I can get the buffer to bind, but am unsure how to get glsl to actually manipulate the data. All the examples I've found online assume a vertex or pixel, so working in one dimensional space has proven oddly more difficult. My own efforts have not been able to create even a small change to the data, leading me to suspect I have missed something very basic.

My Shader Code
Code :
#version 430 core
#extension GL_ARB_compute_shader :				enable
#extension GL_ARB_shader_storage_buffer_object:	enable
 
//this is the copy saved at above-level
 
 
layout( std430, binding=4) buffer bufferKey {
	uint KeyString[]; // array of structures
	//may need to change to uint for the atomics
};
layout( std430, binding=5) buffer bufferTXT {
	uint BufString[]; // array of structures
	//may need to change to uint for the atomics
};
 
 
 
/*
//Special Preset variables in the Compute Shader
   in uvec3 gl_NumWorkGroups; // same numbers as in the glDispatchCompute call
const uvec3 gl_WorkGroupSize; // same numbers as in the layout local_size_*
   in uvec3 gl_WorkGroupID; // which workgroup this thread is in
   in uvec3 gl_LocalInvocationID; // where this thread is in the current workgroup
   in uvec3 gl_GlobalInvocationID; //where this thread is in all the workitems
   in uint  gl_LocalInvocationIdenx; //1d representation of the gl_LocalInvocationID (Used for indexing into a shared array)
*/
 
//uniform GLchar* inputBuffer;// damn TCHAR Conversion
//I think we forced unicode, or wide chars
 
uniform uint keyByteLength;
layout (local_size_x = 1) in;
 
uint cryptoXORop(uint left_in, uint right_in){
 
	//atomicXOR(left_in, right_in);
	//return left_in;
	uint result = left_in ^ right_in;
	return result;
 
	//we can still do the null terminator check with some clever modulo
}
 
 
void main(void)
{
 
	uint gid = gl_LocalInvocationIndex;
 
	// test, xor first value
 
	uint result = cryptoXORop(BufString[gid], KeyString[gid]);
 
	//BufString[gid] = result+1;
	//BufString[ 5 ] = result+2;
 
	BufString[gid+1] += 1;
	BufString[ 5 ] += 2;
 
	atomicAdd(BufString[gid], 2);
	atomicAdd(BufString[ 5 ], 2);
 
	// keyByteLength--; //cannot modifie uniforms
 
	/*
	for( int i = 0; i > -1; i++){
	//intended to be a fatal memory error for the gpu
		BufString[i] = 56;
		//does in fact force the gpu to crash
	}
	*/
 
 
	//seems only the CPU needs this
	//glMemoryBarrier(GL_ALL_BARRIER_BITS); //keep a wait point for all workgroups
	//GroupMemoryBarrier(); 
}

I would also include a pastebin link of the larger function the shader is called from, but as a new use I cannot link to pastebin. (It's kinda huge to post in an opening post)