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,它会阻止随意的观察者复制粘贴价值,但它不安全.
怎么样:
Convert.ToBase64String(Encoding.UTF8.GetBytes(myString));
Run Code Online (Sandbox Code Playgroud)
和它的相反:
Encoding.UTF8.GetString(Convert.FromBase64String(myObfuscatedString));
Run Code Online (Sandbox Code Playgroud)
只要你不介意增加你的字符串长度
尝试使用例如 AES 对其进行加密,如果您知道另一台机器上的加密密钥,则可以轻松地在那里解密
http://msdn.microsoft.com/en-us/library/system.security.cryptography.aes(v=vs.100).aspx
周围有很多代码示例。例如,我通过快速搜索找到了这篇文章,尽管它只有 128 位,但我认为它应该可以解决问题