使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM