Bueno tu pregunta poco tiene que ver con criptografía, estás dando un código que forma parte de alguna implementación criptográfica.
En este caso, las dos líneas son pertenecientes a la API de windows y son normalmente llamadas desde procesos nativos codificados por ejemplo en C++. Por lo tanto al estar tu en C# tienes que hacer uso de Marshalling o P/Invoke para llamar código unmanaged desde managed.
Zeromemory es una función que setea la porción de memoria que tu le dices a 0. En este caso gch.AddressOfPinnedObject() es el puntero de memoria a gch, y sSecretKey.Length * 2 es el número de 0 que va a setear desde el inicio del puntero de gch.
Después gch.Free() es el equivalente a llamar desde C++ a Free(gch); por lo tanto lo que hace es desreferenciar el puntero gch para que el heap lo libere, ten en cuenta que esto hace que gch no contenga nada útil porque pudo haber sido sobreescrito al ser liberado en heap.
Si te suena a chino vas a tener que estudiar mucho
Saludos.