zoukankan      html  css  js  c++  java
  • 使用RSA实现客户端和后台的非对称加密

    什么是RSA

    来看一下百度百科的解释。RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准

    今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

    RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

    客户端和后台的非对称加密

    这里的客户端和后台非对称加密是指,用户第一次发起页面请求时,后台(C#)生成一对公钥和私钥,客户端利用JS和私钥对数据进行加密。这里主要是有一个js加密算法和C#加密算法兼容的地方。在客户端进行加密的主要原因是为了防止网络抓包,加密之后的数据即使被抓包,也是密文而不是明文。

    代码

    后台代码:

      protected string strPublicKeyExponent = "";
            protected string strPublicKeyModulus = "";
            protected string DecryptPassword = "";
            protected void Page_Load(object sender, EventArgs e)
            {
                //创建一个RSA对象
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                if (string.Compare(Request.RequestType, "get", true) == 0)
                {
                  //第一次页面请求时
                    //将私钥存Session中
                    Session["private_key"] = rsa.ToXmlString(true);
                }
    
                //把公钥适当转换,准备发往客户端
                  RSAParameters parameter = rsa.ExportParameters(true);
                RSAEnDecode myRsa = new RSAEnDecode();
                strPublicKeyExponent = myRsa.BytesToHexString(parameter.Exponent);
                strPublicKeyModulus = myRsa.BytesToHexString(parameter.Modulus);
            }

    前端代码:

    这里只贴出加密方法:

    <script src="Scripts/jQuery.md5.js" type="text/javascript" ></script>
    <script src="Scripts/BigInt.js" type="text/javascript"></script>
    <script src="Scripts/RSA.js" type="text/javascript"></script>
    <script src="Scripts/Barrett.js" type="text/javascript"></script>

    <script type="text/javascript">
            function cmdEncrypt(originData) {
                setMaxDigits(129); var key = new RSAKeyPair("<%=strPublicKeyExponent%>", "", "<%=strPublicKeyModulus%>"); var Rtn = encryptedString(key, originData);
                return Rtn;
            }
    </script>

    参考文章:

    http://www.cnblogs.com/guogangj/archive/2012/03/05/2381117.html

  • 相关阅读:
    htmlspecialchar()
    LINUX权限bash: ./startup.sh: Permission denied
    str_replace()
    centos安装教程
    给准备做软件测试的新手们的一点个人心得
    TFS安装与管理
    TFS使用指南
    实现对n个数字随机排序,并循环输出100次
    SSM启动Tomcat报错ERROR [localhoststartStop1] Context initialization failed
    同济大学软件学院万院长谈择业
  • 原文地址:https://www.cnblogs.com/maplecumt/p/4535019.html
Copyright © 2011-2022 走看看