C# 加扰和解扰文本
C# Scramble & Descramble Text
我已经有了这个方法来打乱我的文字,但我不知道如何打乱它?
string input = "https://www.google.de/";
char[] chars = input.ToArray();
Random r = new Random(259);
for (int i = 0; i < chars.Length; i++)
{
int randomIndex = r.Next(0, chars.Length);
char temp = chars[randomIndex];
chars[randomIndex] = chars[i];
chars[i] = temp;
}
new string(chars);
Console.WriteLine(chars);
Console.ReadKey();
我不太擅长这些与数字和计算有关的事情,如果有人能帮助我,这样的事情会很好。
我已经搜索过 Functions,但找不到包含我理解的示例的函数。
//编辑:
-我如何制作一个打乱或随机播放功能,用特定数字打乱文本,以便每次都以相同的方式打乱文本?
-之后我该如何解开它?
只需向后做同样的事情(您需要以相反的顺序使用来自同一种子的相同随机数,因此首先将它们放在列表中):
string input = "https://www.google.de/";
char[] chars = input.ToArray();
Random r = new Random(259);
for (int i = 0; i < chars.Length; i++)
{
int randomIndex = r.Next(0, chars.Length);
char temp = chars[randomIndex];
chars[randomIndex] = chars[i];
chars[i] = temp;
}
string scrambled = new string(chars);
Console.WriteLine(chars);
Console.ReadKey();
r = new Random(259);
char[] scramChars = scrambled.ToArray();
List<int> swaps = new List<int>();
for (int i = 0; i < scramChars.Length; i++)
{
swaps.Add(r.Next(0, scramChars.Length));
}
for (int i = scramChars.Length - 1; i >= 0; i--)
{
char temp = scramChars[swaps[i]];
scramChars[swaps[i]] = scramChars[i];
scramChars[i] = temp;
}
string unscrambled = new string(scramChars);
Console.WriteLine(scramChars);
我过去曾使用自己的 scramble/unscramble 方法以另一种方式完成,但最近发现一些字符串只是不加扰我没有使用交换,而是一种编码形式。
我找到了这个线程并采用了最后提供的解决方案,并通过将种子编码到加扰字符串中使其更有用,因此不需要解码种子。
这允许在数据库中使用加扰的字符串来混淆它以便于阅读。
除非你知道种子在字符串中的嵌入位置(目前是最后一个字符,但如果需要,你可以将其作为字符串的任何部分)
/// <summary>
/// Mix up a string (re-order character positions) using a random number set based from a seed value
/// </summary>
/// <param name="StringToScramble"></param>
/// <returns>Scrambled String with seed encoded</returns>
public static string RandomizeString(string StringToScramble)
{
int seed = RandomNumber(0, 250); // Get a random number (will be encoded into string , this will be the seed
Random r = new Random(seed);
char[] chars = StringToScramble.ToArray();
for (int i = 0; i < StringToScramble.Length; i++)
{
int randomIndex = r.Next(0, StringToScramble.Length); // Get the next random number from the sequence
Debug.Print(randomIndex.ToString());
char temp = chars[randomIndex]; // Copy the character value
// Swap them around
chars[randomIndex] = chars[i];
chars[i] = temp;
}
// Add the seed
return new string(chars) + seed.ToString("X").PadLeft(2, '0');
}
/// <summary>Unscramble a string that was previously scrambled </summary>
/// <param name="ScrambledString">String to Unscramble</param>
/// /// <returns>Unscrambled String</returns>
public static string UnRandomizeString(string ScrambledString)
{
try
{
// Get the last character from the string as this is the random number seed
int seed = int.Parse(ScrambledString.Substring(ScrambledString.Length - 2), System.Globalization.NumberStyles.HexNumber);
Random r = new Random(seed);
char[] scramChars = ScrambledString.Substring(0, ScrambledString.Length - 2).ToArray();
List<int> swaps = new List<int>();
for (int i = 0; i < scramChars.Length ; i++)
{
int randomIndex = r.Next(0, scramChars.Length );
swaps.Add(randomIndex);
}
for (int i = scramChars.Length - 1; i >= 0; i--)
{
char temp = scramChars[swaps[i]];
scramChars[swaps[i]] = scramChars[i];
scramChars[i] = temp;
}
return new string(scramChars);
}
catch (System.Exception ex)
{
return "";
}
}
我已经有了这个方法来打乱我的文字,但我不知道如何打乱它?
string input = "https://www.google.de/";
char[] chars = input.ToArray();
Random r = new Random(259);
for (int i = 0; i < chars.Length; i++)
{
int randomIndex = r.Next(0, chars.Length);
char temp = chars[randomIndex];
chars[randomIndex] = chars[i];
chars[i] = temp;
}
new string(chars);
Console.WriteLine(chars);
Console.ReadKey();
我不太擅长这些与数字和计算有关的事情,如果有人能帮助我,这样的事情会很好。
我已经搜索过 Functions,但找不到包含我理解的示例的函数。
//编辑:
-我如何制作一个打乱或随机播放功能,用特定数字打乱文本,以便每次都以相同的方式打乱文本?
-之后我该如何解开它?
只需向后做同样的事情(您需要以相反的顺序使用来自同一种子的相同随机数,因此首先将它们放在列表中):
string input = "https://www.google.de/";
char[] chars = input.ToArray();
Random r = new Random(259);
for (int i = 0; i < chars.Length; i++)
{
int randomIndex = r.Next(0, chars.Length);
char temp = chars[randomIndex];
chars[randomIndex] = chars[i];
chars[i] = temp;
}
string scrambled = new string(chars);
Console.WriteLine(chars);
Console.ReadKey();
r = new Random(259);
char[] scramChars = scrambled.ToArray();
List<int> swaps = new List<int>();
for (int i = 0; i < scramChars.Length; i++)
{
swaps.Add(r.Next(0, scramChars.Length));
}
for (int i = scramChars.Length - 1; i >= 0; i--)
{
char temp = scramChars[swaps[i]];
scramChars[swaps[i]] = scramChars[i];
scramChars[i] = temp;
}
string unscrambled = new string(scramChars);
Console.WriteLine(scramChars);
我过去曾使用自己的 scramble/unscramble 方法以另一种方式完成,但最近发现一些字符串只是不加扰我没有使用交换,而是一种编码形式。 我找到了这个线程并采用了最后提供的解决方案,并通过将种子编码到加扰字符串中使其更有用,因此不需要解码种子。 这允许在数据库中使用加扰的字符串来混淆它以便于阅读。 除非你知道种子在字符串中的嵌入位置(目前是最后一个字符,但如果需要,你可以将其作为字符串的任何部分)
/// <summary>
/// Mix up a string (re-order character positions) using a random number set based from a seed value
/// </summary>
/// <param name="StringToScramble"></param>
/// <returns>Scrambled String with seed encoded</returns>
public static string RandomizeString(string StringToScramble)
{
int seed = RandomNumber(0, 250); // Get a random number (will be encoded into string , this will be the seed
Random r = new Random(seed);
char[] chars = StringToScramble.ToArray();
for (int i = 0; i < StringToScramble.Length; i++)
{
int randomIndex = r.Next(0, StringToScramble.Length); // Get the next random number from the sequence
Debug.Print(randomIndex.ToString());
char temp = chars[randomIndex]; // Copy the character value
// Swap them around
chars[randomIndex] = chars[i];
chars[i] = temp;
}
// Add the seed
return new string(chars) + seed.ToString("X").PadLeft(2, '0');
}
/// <summary>Unscramble a string that was previously scrambled </summary>
/// <param name="ScrambledString">String to Unscramble</param>
/// /// <returns>Unscrambled String</returns>
public static string UnRandomizeString(string ScrambledString)
{
try
{
// Get the last character from the string as this is the random number seed
int seed = int.Parse(ScrambledString.Substring(ScrambledString.Length - 2), System.Globalization.NumberStyles.HexNumber);
Random r = new Random(seed);
char[] scramChars = ScrambledString.Substring(0, ScrambledString.Length - 2).ToArray();
List<int> swaps = new List<int>();
for (int i = 0; i < scramChars.Length ; i++)
{
int randomIndex = r.Next(0, scramChars.Length );
swaps.Add(randomIndex);
}
for (int i = scramChars.Length - 1; i >= 0; i--)
{
char temp = scramChars[swaps[i]];
scramChars[swaps[i]] = scramChars[i];
scramChars[i] = temp;
}
return new string(scramChars);
}
catch (System.Exception ex)
{
return "";
}
}