You will need to look up the typedef's for DES_cblock and DES_LONG to translate this. However, to get you started, you'll want to read up on StructLayoutAttribute. The way to translate C unions into C# is to use an explicit layout structure:
[StructLayout(LayoutKind.Explicit)]
public struct DES_ks
{
[FieldOffset(0)]
public DES_cblock cblock;
[FieldOffset(0)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public DES_LONG[] deslong;
}
Thanks to @Konrad for fixing my temporary insanity; because you want to produce a union, you need all of the fields to overlap in memory. This is achieved in C# by telling the compiler to lay them out at the same offset, in this case 0.
DES_cblockis. I'm assumingDES_LONGis a simple integral type, but it would be helpful if you could tell us what that is too.