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

时间:2017-07-06 22:00:31

标签: 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[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:]时做了什么?对我来说,它似乎只是采用数组的前三个值并将它们写回原始索引。

2 个答案:

答案 0 :(得分:0)

他正在接受所有项目,但前3项除外。您可以使用C#LINQ等效项Skip

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

答案 1 :(得分:0)

在Python中,您可以使用[startingIndex:EndingIndex]

从列表中获取一些元素

arr [:]表示所有元素

arr [3:]表示跳过3并取其余部分

正如Uriel所提到的,C#等价物 Skip(count)

  

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

你需要添加:

  

使用System.Linq;

Python切片:Explain slice notation