From 2898cada8bea1631edfeb486b3fbb24c796a25a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hora=C8=9Biu=20Mlendea?= Date: Fri, 27 Feb 2026 17:58:21 +0200 Subject: [PATCH 1/2] obfuscation: Implemented obfuscation options --- NuciText.Obfuscation/INuciText.Obfuscation.cs | 2 + NuciText.Obfuscation/NuciText.Obfuscation.cs | 37 ++++++++++++------- .../NuciTextObfuscatorOptions.cs | 7 ++++ 3 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 NuciText.Obfuscation/NuciTextObfuscatorOptions.cs diff --git a/NuciText.Obfuscation/INuciText.Obfuscation.cs b/NuciText.Obfuscation/INuciText.Obfuscation.cs index 89a8773..94e16c9 100644 --- a/NuciText.Obfuscation/INuciText.Obfuscation.cs +++ b/NuciText.Obfuscation/INuciText.Obfuscation.cs @@ -5,5 +5,7 @@ public interface INuciTextObfuscator string Deobfuscate(string text); string Obfuscate(string text); + + string Obfuscate(string text, NuciTextObfuscatorOptions options); } } diff --git a/NuciText.Obfuscation/NuciText.Obfuscation.cs b/NuciText.Obfuscation/NuciText.Obfuscation.cs index a39dfc3..0992ab8 100644 --- a/NuciText.Obfuscation/NuciText.Obfuscation.cs +++ b/NuciText.Obfuscation/NuciText.Obfuscation.cs @@ -217,7 +217,7 @@ public string Deobfuscate(string text) } } - StringBuilder builder = new StringBuilder(input.Length); + StringBuilder builder = new(input.Length); foreach (char character in input) { @@ -258,6 +258,9 @@ public string Deobfuscate(string text) } public string Obfuscate(string text) + => Obfuscate(text, new NuciTextObfuscatorOptions()); + + public string Obfuscate(string text, NuciTextObfuscatorOptions options) { if (text is null) { @@ -269,6 +272,8 @@ public string Obfuscate(string text) return string.Empty; } + options ??= new NuciTextObfuscatorOptions(); + string input = text; foreach (KeyValuePair entry in IdenticalGroupReplacements) @@ -287,20 +292,23 @@ public string Obfuscate(string text) input = input.Replace(group, replacement); } - foreach (KeyValuePair entry in ApproximateGroupReplacements) + if (options.UseApproximateReplacements) { - string group = entry.Key; - string candidates = entry.Value; + foreach (KeyValuePair entry in ApproximateGroupReplacements) + { + string group = entry.Key; + string candidates = entry.Value; - string replacement = group; + string replacement = group; - if (RandomGenerator.Next(1, 11) <= 6 && candidates.Length > 0) - { - int index = RandomGenerator.Next(candidates.Length); - replacement = candidates[index].ToString(); - } + if (RandomGenerator.Next(1, 11) <= 6 && candidates.Length > 0) + { + int index = RandomGenerator.Next(candidates.Length); + replacement = candidates[index].ToString(); + } - input = input.Replace(group, replacement); + input = input.Replace(group, replacement); + } } StringBuilder builder = new(input.Length); @@ -316,9 +324,12 @@ public string Obfuscate(string text) candidatesBuilder.Append(IdenticalReplacements[character]); } - if (ApproximateReplacements.ContainsKey(character)) + if (options.UseApproximateReplacements) { - candidatesBuilder.Append(ApproximateReplacements[character]); + if (ApproximateReplacements.ContainsKey(character)) + { + candidatesBuilder.Append(ApproximateReplacements[character]); + } } string candidates = candidatesBuilder.ToString(); diff --git a/NuciText.Obfuscation/NuciTextObfuscatorOptions.cs b/NuciText.Obfuscation/NuciTextObfuscatorOptions.cs new file mode 100644 index 0000000..ffbb9f5 --- /dev/null +++ b/NuciText.Obfuscation/NuciTextObfuscatorOptions.cs @@ -0,0 +1,7 @@ +namespace NuciText.Obfuscation +{ + public sealed class NuciTextObfuscatorOptions + { + public bool UseApproximateReplacements { get; set; } = false; + } +} From a6606b3fe595e1667d4b967c4635958bac7ec5dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hora=C8=9Biu=20Mlendea?= Date: Fri, 27 Feb 2026 18:04:06 +0200 Subject: [PATCH 2/2] obfuscation: Updated UTs --- .../NuciTextObfuscatorTests.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/NuciText.Obfuscation.UnitTests/NuciTextObfuscatorTests.cs b/NuciText.Obfuscation.UnitTests/NuciTextObfuscatorTests.cs index 079883c..0ab65b5 100644 --- a/NuciText.Obfuscation.UnitTests/NuciTextObfuscatorTests.cs +++ b/NuciText.Obfuscation.UnitTests/NuciTextObfuscatorTests.cs @@ -7,6 +7,10 @@ public class NuciTextObfuscatorTests static int TestSeed => 123456789; static string TestPlainString => "Test string!"; static string TestObfuscatedString => "ꓔеst strіng!"; + static NuciTextObfuscatorOptions TestObfuscatorOptions => new() + { + UseApproximateReplacements = true + }; INuciTextObfuscator obfuscator; @@ -22,7 +26,7 @@ public void GivenAnEmptyString_WhenDebfuscating_ThenTheResultIsEmpty() [Test] public void GivenAnEmptyString_WhenObfuscating_ThenTheResultIsEmpty() - => Assert.That(obfuscator.Obfuscate(string.Empty), Is.Empty); + => Assert.That(obfuscator.Obfuscate(string.Empty, TestObfuscatorOptions), Is.Empty); [Test] public void GivenANullString_WhenDeobfuscating_ThenTheResultIsNull() @@ -30,7 +34,7 @@ public void GivenANullString_WhenDeobfuscating_ThenTheResultIsNull() [Test] public void GivenANullString_WhenObfuscating_ThenTheResultIsNull() - => Assert.That(obfuscator.Obfuscate(null), Is.Null); + => Assert.That(obfuscator.Obfuscate(null, TestObfuscatorOptions), Is.Null); [Test] public void GivenAValidString_WhenDeobfuscating_ThenTheResultIsNotNull() @@ -38,7 +42,7 @@ public void GivenAValidString_WhenDeobfuscating_ThenTheResultIsNotNull() [Test] public void GivenAValidString_WhenObfuscating_ThenTheResultIsNotNull() - => Assert.That(obfuscator.Obfuscate(TestPlainString), Is.Not.Null); + => Assert.That(obfuscator.Obfuscate(TestPlainString, TestObfuscatorOptions), Is.Not.Null); [Test] public void GivenAValidString_WhenDeobfuscating_ThenTheResultIsNotEmpty() @@ -46,7 +50,7 @@ public void GivenAValidString_WhenDeobfuscating_ThenTheResultIsNotEmpty() [Test] public void GivenAValidString_WhenObfuscating_ThenTheResultIsNotEmpty() - => Assert.That(obfuscator.Obfuscate(TestPlainString), Is.Not.Empty); + => Assert.That(obfuscator.Obfuscate(TestPlainString, TestObfuscatorOptions), Is.Not.Empty); [Test] public void GivenAValidString_WhenDeobfuscating_ThenTheResultHasBeenDeobfuscated() @@ -54,6 +58,6 @@ public void GivenAValidString_WhenDeobfuscating_ThenTheResultHasBeenDeobfuscated [Test] public void GivenAValidString_WhenObfuscating_ThenTheResultHasBeenObfuscated() - => Assert.That(obfuscator.Obfuscate(TestPlainString), Is.EqualTo(TestObfuscatedString)); + => Assert.That(obfuscator.Obfuscate(TestPlainString, TestObfuscatorOptions), Is.EqualTo(TestObfuscatedString)); } } \ No newline at end of file