容易地混淆串 .NET?

我需要发送一个字符串 30 通过互联网的符号,可能是 ID 在另一家公司的数据库中。

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

混淆这样一个字符串的最简单方法是什么? .NET, 这样必要时可以很容易地翻身?
已邀请:

卫东

赞同来自:

经典的东西怎么样? /拥有现代偏见/?


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/;
}


显然你会像这样使用


var plain = "Wibble";
var caesered = plain.Caesar/42/;
var newPlain = caesered.Caesar/-42/;


它快速,你的钥匙只是
Int16

, 并且它不会允许随机观察者复制该值的插入,但它不安全。

小姐请别说爱

赞同来自:

关于什么:


Convert.ToBase64String/Encoding.UTF8.GetBytes/myString//;


她的上诉:


Encoding.UTF8.GetString/Convert.FromBase64String/myObfuscatedString//;


只要您不介意行的长度增加

风见雨下

赞同来自:

例如,尝试加密它,例如,使用 AES, 如果您知道另一台计算机上的加密密钥,则可以轻松破译它

http://msdn.microsoft.com/en-u ... .aspx
周围有许多代码示例。 例如,我通过快速搜索找到了这篇文章,虽然它只是 128 有点,我想他应该做一个伎俩

https://coderoad.ru/273452/

江南孤鹜

赞同来自:

我受到了答案的启发 @Jodrell,, 这是我的替代版本。 唯一的真实区别在于我在模块中使用运算符而不是设计 if-then-else.

如果你,像我一样,从来没有听说过Caesar的密码,那这里是链接:

https://en.wikipedia.org/wiki/Caesar_cipher

public static partial class MString
{
...

/// <summary>
/// Method to perform a very simple /and classical/ encryption for a string. This is NOT at
/// all secure, it is only intended to make the string value non-obvious at a first glance.
///
/// The shiftOrUnshift argument is an arbitrary "key value", and must be a non-zero integer
/// between -65535 and 65535 /inclusive/. To decrypt the encrypted string you use the negative
/// value. For example, if you encrypt with -42, then you decrypt with +42, or vice-versa.
///
/// This is inspired by, and largely based on, this:
/// [url=https://stackoverflow.com/a/13026595/253938]https://stackoverflow.com/a/13026595/253938[/url]
/// </summary>
/// <param name="inputString"/>string to be encrypted or decrypted, must not be null
/// <param name="shiftOrUnshift"/>see above
/// <returns>encrypted or decrypted string</returns>
public static string CaesarCipher/string inputString, int shiftOrUnshift/
{
// Check C# is still C#
Debug.Assert/char.MinValue == 0 && char.MaxValue == UInt16.MaxValue/;

const int C64K = UInt16.MaxValue + 1;

// Check the arguments
if /inputString == null/
throw new ArgumentException/"Must not be null.", "inputString"/;
if /shiftOrUnshift == 0/
throw new ArgumentException/"Must not be zero.", "shiftOrUnshift"/;
if /shiftOrUnshift <= -C64K || shiftOrUnshift >= C64K/
throw new ArgumentException/"Out of range.", "shiftOrUnshift"/;

// Perform the Caesar cipher shifting, using modulo operator to provide wrap-around
char[] charArray = new char[inputString.Length];
for /int i = 0; i < inputString.Length; i++/
{
charArray[i] =
Convert.ToChar//Convert.ToInt32/inputString[i]/ + shiftOrUnshift + C64K/ % C64K/;
}

// Return the result as a new string
return new string/charArray/;
}

...
}


和一些测试代码:


// Test CaesarCipher// method
const string CHelloWorld = "Hello world!";
const int CCaesarCipherKey = 42;
string caesarCiphered = MString.CaesarCipher/CHelloWorld, CCaesarCipherKey/;
if /MString.CaesarCipher/caesarCiphered, -CCaesarCipherKey/ != CHelloWorld/
throw new Exception/"Oh no!"/;

要回复问题请先登录注册