在.NET中简单混淆字符串?

Pau*_*ter 14 .net c# string obfuscation

我需要在互联网上发送一串大约30个字符的字符串,这可能最终会成为另一家公司数据库中的ID.

虽然字符串本身不会识别,但我仍然希望它不会以任何方式识别.

在.NET中混淆这样一个字符串的最简单方法是什么,以便在必要时可以轻松撤消?

Jod*_*ell 21

古典(具有现代风格)的东西怎么样.

public static string Caesar(this string source, Int16 shift)
{
    var maxChar = Convert.ToInt32(char.MaxValue);
    var minChar = Convert.ToInt32(char.MinValue);

    var buffer = source.ToCharArray();

    for (var i = 0; i < buffer.Length; i++)
    {
        var shifted = Convert.ToInt32(buffer[i]) + shift;

        if (shifted > maxChar)
        {
            shifted -= maxChar;
        }
        else if (shifted < minChar)
        {
            shifted += maxChar;
        }

        buffer[i] = Convert.ToChar(shifted);
    }

    return new string(buffer);
}
Run Code Online (Sandbox Code Playgroud)

显然你会这样使用

var plain = "Wibble";
var caesered = plain.Caesar(42);
var newPlain = caesered.Caesar(-42);
Run Code Online (Sandbox Code Playgroud)

它很快,你的关键只是一个Int16,它会阻止随意的观察者复制粘贴价值,但它不安全.


Joe*_*Joe 7

怎么样:

    Convert.ToBase64String(Encoding.UTF8.GetBytes(myString));
Run Code Online (Sandbox Code Playgroud)

和它的相反:

    Encoding.UTF8.GetString(Convert.FromBase64String(myObfuscatedString));
Run Code Online (Sandbox Code Playgroud)

只要你不介意增加你的字符串长度

  • 唯一的缺点,除了大小增加,是故事总是让我思考的故事`==`终结者,必须是base64. (8认同)
  • base64很容易猜到格式 (3认同)
  • @rolls - 恕我直言,如果您关心算法是否可以轻易猜到,您应该使用加密而不是混淆. (2认同)

mid*_*pat 5

尝试使用例如 AES 对其进行加密,如果您知道另一台机器上的加密密钥,则可以轻松地在那里解密

http://msdn.microsoft.com/en-us/library/system.security.cryptography.aes(v=vs.100).aspx

周围有很多代码示例。例如,我通过快速搜索找到了这篇文章,尽管它只有 128 位,但我认为它应该可以解决问题

在 C# 中使用 AES 加密