我正在使用c#制作一个关于团结的小游戏。它基本上是一个2d侧滚动转轮类型的游戏。我测量每个玩家完成游戏所需的时间,并将其存储在浮点数上。我想把它和一个盐字放在一个字符串中,并向播放器显示一个加密的代码。
代码必须足够小,以便由播放器轻松地写下来。我应该能够解密玩家将发送给我的代码,并计算出他/她完成游戏所花费的时间。
请告诉我该怎么做。我在网上看到的大多数算法都非常复杂,产生了大量的加密文本。
提前谢谢。
发布于 2014-05-21 10:53:04
只需做一些类似凯撒密码的事情。例如:
for (int i = 0; i < message.Length(); i++)
{
if (message[i] < 123 && message[i] > 96)
{
// 97 to 122 are 'a' to 'z'
message[i] += 3;
if (message[i] > 122)
{
message[i] -= 26;
}
}
}
EDIT: XOR-encryption:
string codeword = "word";
string res = "";
for (int i = 0; i < message.Length(); i++)
{
res += (char)(message[i] ^ codeword[i % codeword.Length()]);
}要解密它,只需在加密的消息上再次运行加密。
发布于 2014-05-21 10:56:13
正确地加密它通常会产生不符合您需要的大值。您可以查看类似于将值(例如,g)转换为基数36的内容。
http://www.translatorscafe.com/cafe/units-converter/numbers/calculator/decimal-to-base-36/
例如,以10:50的时间为例,您可以将其翻译成类似于9991050的内容,给出5Y556的用户代码。然后,您可以将它转换回十进制,并相应地解析它。
这并不是真正的加密本身,但它可能适合您的需要。
发布于 2016-08-29 14:36:12
以下是Rot13想法的一些变体。Rot39也只置乱字符的一个子集,它不是像凯撒那样简单的算术。
public static string Rot47(string input)
{
return !string.IsNullOrEmpty(input) ? new string(input.Select(x =>
(x >= 33 && x <= 126) ? (char)((x + 14) % 94 + 33) : x).ToArray()) : input;
}
public static string Rot13(string input)
{
return !string.IsNullOrEmpty(input) ? new string(input.Select(x =>
(x >= 'a' && x <= 'z') ? (char)((x - 'a' + 13) % 26 + 'a') :
(x >= 'A' && x <= 'Z') ? (char)((x - 'A' + 13) % 26 + 'A') : x).ToArray()) : input;
}
public static string Rot39(string input)
{
// This string contains 78 different characters in random order.
var mix = "QDXkW<_(V?cqK.lJ>-*y&zv9prf8biYCFeMxBm6ZnG3H4OuS1UaI5TwtoA#Rs!,7d2@L^gNhj)EP$0";
var result = (input ?? "").ToCharArray();
for (int i = 0; i < result.Length; ++i)
{
int j = mix.IndexOf(result[i]);
result[i] = (j < 0) ? result[i] : mix[(j + 39) % 78];
}
return new string(result);
}一个好的黑客可能需要大约15分钟的时间才能用黑匣子测试出Rot39。
https://stackoverflow.com/questions/23780833
复制相似问题