使用C#和ASP.net的Konami代码

时间:2010-12-10 13:12:56

标签: c#

  

http://en.wikipedia.org/wiki/Konami_Code

我已经使用完整的javascript完成了这个,但我怎么能在C#/ asp.net网站(不是winform)中这样做。感谢..

4 个答案:

答案 0 :(得分:4)

所以你的意思是用户在查看来源时不应该发现你的超级秘密konami代码?

不可能完全在服务器端完成,除非你想要在每次击键时回发,这很尴尬。

你可以压缩和混淆javascript,但我猜一个有坚定决心的用户仍然可以解决这个问题。

您可以使用Silverlight,但同样,具有强烈决心的用户可以从浏览器缓存中解压缩XAP并在反射器中查看您的DLL。

你可以做的是使用AJAX将每次击键发送到服务器(或者可以在客户端收集它们并批量发送),这实际上并非 非常慢。在服务器上,您必须分析击键。该代码对用户不可见。然后,您必须模拟一些推送机制,以在客户端触发您想要的反应。

答案 1 :(得分:3)

在C#中进行它是没有意义的。这样的代码无论如何都必须在客户端执行,所以它必须是Javascript(除非你想将每个客户端击键发送到服务器,这将非常缓慢)

无论如何,这是一个C#实现。它适用于WPF,但要使其适应其他技术并不困难。

    private static readonly Key[] _konamiCode = new[] { Key.Up, Key.Up, Key.Down, Key.Down, Key.Left, Key.Right, Key.Left, Key.Right, Key.B, Key.A };
    int _konamiCurrentIndex = 0;

    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        base.OnPreviewKeyDown(e);
        if (e.Key == _konamiCode[_konamiCurrentIndex])
        {
            _konamiCurrentIndex++;
            if (_konamiCurrentIndex == _konamiCode.Length)
            {
                _konamiCurrentIndex = 0;
                KonamiEasterEgg();
            }
        }
        else
        {
            _konamiCurrentIndex = 0;
        }
    }

    void KonamiEasterEgg()
    {
        // whatever you want to do when the Konami code is entered...
    }

答案 2 :(得分:0)

正如其他人已经说过的那样,在C#中实现完全没有多大意义。但我可以想象JavaScript + AJAX与C#的某种组合......只是一些想法:)

可能的工作流程:使用JavaScript扫描用户输入(最后10个键)并将输入推送到数组(ascii代码或其他内容)并通过AJAX发送请求,这将返回整个秘密目标页面作为html结果而不仅仅是检查,因为这很容易破解。实际上,这更像是密码比较。但你可以优化你的JavaScript并在没有输入(空闲时间)的情况下在几秒钟内清除数组(例如输入必须流畅)并在1秒后发送ajax请求而不输入,这样你就不会淹没自己的服务器

JQuery会帮助你很多!

快乐编码:)

  • 最好的问候 托马斯

答案 3 :(得分:0)

见herzmeister der welten

  

你可以做的是使用AJAX将每次击键发送到服务器(或者可以在客户端收集它们并批量发送),这实际上并不那么痛苦。在服务器上,您必须分析击键。该代码对用户不可见。然后,您必须模拟一些推送机制,以在客户端触发您想要的反应。

触发器可能是组合中所需的最后一次击键,用户只能解密最后一次击键,这样可以提供最少的回发,而无需进行客户端验证。

(本来只是发表评论但缺乏代表)