首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#非常简单的游戏字符串加密

C#非常简单的游戏字符串加密
EN

Stack Overflow用户
提问于 2014-05-21 10:40:09
回答 4查看 10.4K关注 0票数 0

我正在使用c#制作一个关于团结的小游戏。它基本上是一个2d侧滚动转轮类型的游戏。我测量每个玩家完成游戏所需的时间,并将其存储在浮点数上。我想把它和一个盐字放在一个字符串中,并向播放器显示一个加密的代码。

代码必须足够小,以便由播放器轻松地写下来。我应该能够解密玩家将发送给我的代码,并计算出他/她完成游戏所花费的时间。

请告诉我该怎么做。我在网上看到的大多数算法都非常复杂,产生了大量的加密文本。

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-21 10:53:04

只需做一些类似凯撒密码的事情。例如:

代码语言:javascript
运行
复制
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()]);
}

要解密它,只需在加密的消息上再次运行加密。

票数 2
EN

Stack Overflow用户

发布于 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的用户代码。然后,您可以将它转换回十进制,并相应地解析它。

这并不是真正的加密本身,但它可能适合您的需要。

票数 1
EN

Stack Overflow用户

发布于 2016-08-29 14:36:12

以下是Rot13想法的一些变体。Rot39也只置乱字符的一个子集,它不是像凯撒那样简单的算术。

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23780833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档