C#试图通过解析来混淆数字

时间:2018-06-12 10:01:46

标签: c#

这是我正在使用的当前代码

        public string obfuscateNums(string src)
    {
        string returnSrc = src;
        string[] numbers = Regex.Split(src, @"\D+");
        foreach (string val in numbers)
        {
            if (!string.IsNullOrEmpty(val))
            {
                string newNum = obfuscateNumber(val);
                Regex reg = new Regex(val);
                returnSrc = reg.Replace(returnSrc, newNum);
            }
        }
        return returnSrc;
    }
    public string obfuscateNumber(string origNumber)
    {
        Random random = new Random();
        int orig = Convert.ToInt32(origNumber);
        int add = random.Next(0, orig * 2);
        int sub = add;
        int mul = random.Next(0, orig * 2);
        int div = mul;

        return "((((" + orig + " + " + add + ")-" + sub + ")*" + mul + ")/" + div + ")";
    }

之前它只会混淆最后一个号码,但现在它已经混淆了已经混淆的号码内的数字。有谁知道我会如何解决这个问题?

当前结果:

local x = ((((27 + ((((5 + 9)-9)*0)/0)1)-((((5 + 9)-9)*0)/0)1)*((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))/((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0)) + ((((29 + ((((5 + 9)-9)*0)/0)((((4 + 7)-7)*0)/0))-((((5 + 9)-9)*0)/0)((((4 + 7)-7)*0)/0))*((((4 + 7)-7)*0)/0))/((((4 + 7)-7)*0)/0)) + ((((28 + ((((5 + 9)-9)*0)/0)((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))-((((5 + 9)-9)*0)/0)((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))*((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))/((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0)) + ((((26 + ((((4 + 7)-7)*0)/0)9)-((((4 + 7)-7)*0)/0)9)*((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0))/((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0)) + ((((3 + ((((5 + 9)-9)*0)/0))-((((5 + 9)-9)*0)/0))*0)/0) + ((((4 + 7)-7)*0)/0) + ((((5 + 9)-9)*0)/0)

2 个答案:

答案 0 :(得分:1)

您可以使用Regex.Replace(...)的重载来获取MatchEvaluatorhttps://msdn.microsoft.com/en-us/library/cft8645c(v=vs.110).aspx

像这样:

public string obfuscateNums(string src)
{
    string returnSrc = src;
    var reg = new Regex(@"\d+");
    return reg.Replace(src, (match) => obfuscateNumber(match.Value));
}

public string obfuscateNumber(string origNumber)
{
    Random random = new Random();
    int orig = Convert.ToInt32(origNumber);
    int add = random.Next(0, orig * 2);
    int sub = add;
    int mul = random.Next(0, orig * 2);
    int div = mul;

    return "((((" + orig + " + " + add + ")-" + sub + ")*" + mul + ")/" + div + ")";
}

MatchEvaluator方法参数是一种处理每个匹配并返回替换值的方法。

答案 1 :(得分:0)

var returnSrc = src; var numbers = Regex.Split(src, @"\D+"); var lastIndex = 0; foreach (var val in numbers) if (!string.IsNullOrEmpty(val)) { var newNum = ObfuscateNumber(val); var startIndex = returnSrc.IndexOf(val, lastIndex); if (startIndex == -1) continue; returnSrc = returnSrc.Remove(startIndex, val.Length); returnSrc = returnSrc.Insert(startIndex, newNum); lastIndex = startIndex + newNum.Length; } return returnSrc; 更改为:

ArrearsL1M<-function(input1, input2, input3, input4){
  output=0
  output=ifelse((df[[input1]] %in% c(1,2,3,4,5)),1,
                ifelse((df[[input2]] %in% c(1,2,3,4,5)),1,
                       ifelse((df[[input3]] %in% c(1,2,3,4,5)),1,
                              ifelse((df[[input4]] %in% c(1,2,3,4,5)), 1, 0))))
  return(output)