将解密函数从Python转换为C#

将解密函数从Python转换为C#,c#,python,encryption,C#,Python,Encryption,我正在翻译我在互联网上找到的解密函数。该函数是用Python编写的,我正在将其转换为C#。我已经完成了相当多的工作(希望是正确的),但是有些语法我很难阅读 以下是原始函数: def decrypt_signature(s): arr = list(s) arr[0], arr[52] = arr[52%len(arr)], arr[0] arr.reverse() arr = arr[3:] arr[0], arr[21] = arr[21%len(arr)], arr[

我正在翻译我在互联网上找到的解密函数。该函数是用Python编写的,我正在将其转换为C#。我已经完成了相当多的工作(希望是正确的),但是有些语法我很难阅读

以下是原始函数:

def decrypt_signature(s):
arr = list(s)
   arr[0], arr[52] = arr[52%len(arr)], arr[0]
   arr.reverse()
   arr = arr[3:]
   arr[0], arr[21] = arr[21%len(arr)], arr[0]
   arr.reverse()
   arr = arr[3:]
   arr.reverse()

   return "".join(arr)
到目前为止,我已经翻译了以下内容:

private string DecryptSig(string s)
        {
            //arr = list(s)
            char[] arr = s.ToArray();

            //arr[0], arr[52] = arr[52%len(arr)], arr[0]
            var temp = arr[0];
            arr[0] = arr[52 % arr.Length];
            arr[52 % arr.Length] = temp;

            //arr.reverse()
            arr.Reverse();

            //arr = arr[3:]
            //?????????????????

            //arr[0], arr[21] = arr[21 % len(arr)], arr[0]
            temp = arr[0];
            arr[0] = arr[21 % arr.Length];
            arr[21 % arr.Length] = temp;

            //arr.reverse()
            arr.Reverse();

            //arr = arr[3:]
            //??????????????????

            //arr.reverse()
            arr.Reverse();

            //return "".join(arr)
            return "" + new string(arr);
        }

作者在写arr=arr[3:]时做了什么?对我来说,它似乎只是获取数组的前三个值,然后将它们写回原始索引。

他获取了除前三个之外的所有项。您可以使用C#LINQ等效程序,
Skip

arr = arr.Skip(3).ToArray();

在Python中,可以使用[startingIndex:EndingIndex]从列表中获取一些元素

arr[:]表示所有元素

arr[3:]的意思是跳过第三步,然后取下剩下的部分

正如乌里尔提到的,C#等价物是跳过(计数)

arr=arr.Skip(3.ToArray()

您需要添加以下内容:

使用System.Linq


Python切片:

它创建了一个包含元素3及以上的新列表。例如,
[1,2,3,4,5][3:][4,5]
这不是加密,只是奇怪的编码:没有密钥。