当前位置: 首页 > news >正文

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

这次实现了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

 

 

转载于:https://www.cnblogs.com/aarond/p/A2D-DES.html

相关文章:

  • boost库在工作(37)网络UDP服务端之七
  • H面试程序(0):字符串一些常用函数的实现
  • 不容易系列之(4)——考新郎[HDU2049]
  • 正则表达式介绍
  • hdu 1029
  • SQL server经验分享:SQLSERVER 被标记为“可疑”的数据库处理方法
  • 代码自动生成工具MyGeneration之一(程序员必备工具)
  • ASP.NET中利用Split实现对Checkbox的字符串分离放到DataTable里面
  • Git基本操作(add,commit的理解)
  • 怎么编写测试驱动程序
  • 百度地图 - 合并模拟器和真机的静态库文件
  • vb常用命名空间
  • Java解析xml配置文件合成器
  • HTTP 状态代码及其定义
  • VS2008快捷键大全
  • 《剑指offer》分解让复杂问题更简单
  • Apache的80端口被占用以及访问时报错403
  • Flannel解读
  • JavaScript函数式编程(一)
  • Java的Interrupt与线程中断
  • js继承的实现方法
  • Lsb图片隐写
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • vue自定义指令实现v-tap插件
  • 阿里云应用高可用服务公测发布
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • ------- 计算机网络基础
  • 聊聊redis的数据结构的应用
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #宝哥教你#查看jquery绑定的事件函数
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (JS基础)String 类型
  • (搬运以学习)flask 上下文的实现
  • (二十三)Flask之高频面试点
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (九十四)函数和二维数组
  • (利用IDEA+Maven)定制属于自己的jar包
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (循环依赖问题)学习spring的第九天
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)linux下的时间函数使用
  • .Net core 6.0 升8.0
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • /etc/motd and /etc/issue