• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

A2DJS框架-DES加密解密与Cookie的封装(C#与js互相加密解密)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了)

使用的代码如下,非常方便:

<script src="A2D.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
        var msg = $.DES.encrypt("要研究mysql,最好的资源莫过于源码了,所以本人打算通过调试源码的方式来深入理解mysql的点点滴滴。");
        document.writeln(msg);
        document.writeln("<br />");
        document.writeln($.DES.decrypt(msg));
    </script>

 输出内容:

385bdba36c0e65dee2ab7fc31fbf7ec43566195c29bf18e4722421397cbbf17a665843bd245226bf8947b59d1609837662b149fb025175d9f76dd9710b165c12c0763ca6d0dd549d8b2b9a2fb6f9a3ffaea19281d92eb84972ad3394198bd5ccb0bfb3be071ff32b 
<br />
要研究mysql,最好的资源莫过于源码了,所以本人打算通过调试源码的方式来深入理解mysql的点点滴滴。

 

C#服务器端使用了js沙箱来运行A2D.js代码,因此能做到加密解密的一致性,如下:

public static class JSSecurity
    {
        public class MockWindow
        {
        }
        public class MockDocument
        {
        }

        public static string MainJSPath { get; set; }
        static MockWindow wnd = new MockWindow();
        static MockDocument doc = new MockDocument();

        public static string Encode(string plainText)
        {
            using (JavascriptContext context = new JavascriptContext())
            {
                context.SetParameter("window", wnd);
                context.SetParameter("document", doc);
                context.SetParameter("message", plainText);
                string js = File.ReadAllText(MainJSPath);
                js += @"
                            result = window.$.DES.encrypt(message);
";
                context.Run(js);
                string result = (string)context.GetParameter("result");
                return result;
            }
        }
        public static string Decode(string encryptedText)
        {
            using (JavascriptContext context = new JavascriptContext())
            {
                context.SetParameter("window", wnd);
                context.SetParameter("document", doc);
                context.SetParameter("encryptedMessage", encryptedText);
                string js = File.ReadAllText(MainJSPath);
                js += @"
                            result = window.$.DES.decrypt(encryptedMessage);
";
                context.Run(js);
                string result = (string)context.GetParameter("result");
                return result;
            }
        }
    }

 

真的很简单。

下面来看看Cookie的使用,加密了的,不是明文的,并且服务器端能够正确解析:

 <form action="WebForm1.aspx" method="post">
        <input type="button" onclick="javascript:onSetCookie();" value="set cookie(js des encrypt)" />
        <br />
        <input type="submit" value="Post" />
    </form>
    <script language="javascript" type="text/javascript">
        function onSetCookie() {
            $.Cookie.set("账号ID", "aaron.dai");
            alert($.Cookie.get("账号ID"));
        }
    </script>

 

当click按钮后,设置cookie;点Post按钮后,submit到webform1.aspx,让C#来解析cookie的明文:

protected void Page_Load(object sender, EventArgs e)
        {
            global::A2D.JSSecurity.MainJSPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "A2D\\A2D.js");

            foreach(string key in Request.Cookies.AllKeys)
            {
                Response.Write("key:"+key);
                Response.Write("<br />value:" + Request.Cookies[key].Value);
                Response.Write("<br />=====><br />");
                Response.Write("key:" + global::A2D.JSSecurity.Decode(key));
                Response.Write("<br />value:" + global::A2D.JSSecurity.Decode(Request.Cookies[key].Value));
            }
        }

just so easy.

code download

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
控制台程序(C#)不弹出登录窗口连接到DynamicsCRMOnline的WebAPI发布时间:2022-07-14
下一篇:
C/C++中的变量和静态变量发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap