zoukankan      html  css  js  c++  java
  • RSA非对称性前端加密后端解密

    前端加密代码

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>RSA非对称加密登录</title>
        <script src="~/JS/jquery-1.8.1.min.js"></script><script src="~/JS/RSA.js"></script>
        <script src="~/JS/BigInt.js"></script>
        <script src="~/JS/Barrett.js"></script>
        <script type="text/javascript">
            $(function () {
                index.init();
            });
    
            var index = function () {
                setMaxDigits(129);
                //第一个参数为加密指数、第二个参数为解密参数、第三个参数为加密系数
                var key_to_encode = new RSAKeyPair("010001", "", "A12A08F50D3B15E2BA7658C49A6CD068E3BB8AB439B8E5D125904F5C954AD7553CE712046182D299E3831516A2477578D86BA9D0C5C70D78FFCACCFD040C430A7B53729D517139B893DB7B228759D44BE5A3A5AE870287A2B5F165EE698EEAB9FEF345F82D27D789F0E5F79490AB324A4EDEE11A76A38FCB6E05F64335D2A60D");
                var _initEvent = function () {
                    $("#submit").click(function () {
                        submitData();
                    });
                }
    
                function submitData() {
                    var userName = $("#userName").val();
                    var pwd = $("#pwd").val();
                    pwd = encryptedString(key_to_encode, pwd)
                    $.ajax({
                        url: "/Home/Login",
                        data: {
                            "userName": userName,
                            "pwd": pwd
                        },
                        datatype: "json",
                        type: "get",
                        success: function (json) {
                            $("#result").html("登录结果:" + json.result + "<br/>前端传入密码:" + json.InPwd + "<br/>后端解密后:" + json.OutPwd);
                        }
                    });
                }
    
                return {
                    init: function () {
                        _initEvent();
                    }
                }
            }();
    
        </script>
    </head>
    <body>
        用户名:<input type="text" id="userName" value="张三" /><br /><br />
        密   码:<input type="text" id="pwd" value="12345677" /><br /><br />
        <input type="button" id="submit" value="提交" />
        <p id="result"></p>
    </body>
    </html>

    后端登录处理和解密代码  

            public ActionResult Login(string userName, string pwd)
            {
                string outPwd = RSADecrypts.RSADecrypt(pwd);
                if (outPwd == "12345677" && userName == "张三")
                {
                    return Json(new { result = "登录成功", InPwd = pwd, OutPwd = outPwd }, JsonRequestBehavior.AllowGet);
                }
                else
                {
                    return Json(new { result = "用户名或密码不对", InPwd = pwd, OutPwd = outPwd }, JsonRequestBehavior.AllowGet);
                }
    
            }
    
      public static string RSADecrypt(string pToDecrypt)
            {
                string privateKey = "<RSAKeyValue><Modulus>oSoI9Q07FeK6dljEmmzQaOO7irQ5uOXRJZBPXJVK11U85xIEYYLSmeODFRaiR3V42Gup0MXHDXj/ysz9BAxDCntTcp1RcTm4k9t7IodZ1Evlo6WuhwKHorXxZe5pjuq5/vNF+C0n14nw5feUkKsySk7e4Rp2o4/LbgX2QzXSpg0=</Modulus><Exponent>AQAB</Exponent><P>0nRJAznZ9iAUkCkW//b9sQ5KquqRqqTe8/jp2ZAkCXuGz7WNCMQsSX/doJY0Dfum5MDeq0Y4ShB/LRSWhrKSrw==</P><Q>xArz6MLHAHOY7z76pA5o10mERKp7z4yhm/wFa9ghgy3Q3bQAfotRsLbT16ELmXqFi1Wo0Z2CprtZpVMsaGdyAw==</Q><DP>n0/t8WY6zCmOx26DfbKwavbBqU62hHIYYKG+DLcjwJXlAJmTsN4oFF+aGzV5JFirByHFrewTMmX4j9y08jR9+w==</DP><DQ>XDg+xrahgE/gmGLK6tOwc92sb9S2y0p/V241aqbQFPI/d5tORDjrY7KNcrjaSQd+vK297WUn6aDmKcQ3dqF62w==</DQ><InverseQ>N1WISfI5sfIovGeRCpTjz0kGfCuqURyjU+MxCD+xmCCgDcNKmSiDaUzKprnoCZbFd5IvSYGFSpPSdtpQ3qcVRw==</InverseQ><D>HgwCuIE7e1SWk/rvyKSx5GRU8kKwok7ChADYMvgoiGX9YU1EINPtpMA8j6F1JuJ5YcwM0H4XIuVktzApmegZVV6oS8xgdiWWixYufc8MThyP5FEBBd4LxPkVDSBsO3v8mdsWAZIi+Gup+SCnyrNqDp2a984/dfwyxWPj1PmacYc=</D></RSAKeyValue>";
                CspParameters cspParameters = new CspParameters();
                cspParameters.KeyContainerName = "containerName";
                cspParameters.KeyNumber = 1;
                cspParameters.Flags = CspProviderFlags.UseMachineKeyStore;
    
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParameters))
                {
                    rsa.FromXmlString(privateKey);
                    byte[] result = rsa.Decrypt(HexStringToBytes(pToDecrypt), false);
                    System.Text.ASCIIEncoding enc = new ASCIIEncoding();
                    return enc.GetString(result);
                }
            }
    
            private static byte[] HexStringToBytes(string hex)
            {
                if (hex.Length == 0)
                {
                    return new byte[] { 0 };
                }
    
                if (hex.Length % 2 == 1)
                {
                    hex = "0" + hex;
                }
    
                byte[] result = new byte[hex.Length / 2];
    
                for (int i = 0; i < hex.Length / 2; i++)
                {
                    result[i] = byte.Parse(hex.Substring(2 * i, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                }
    
                return result;
            }

     生成公钥私钥代码

     private static string BytesToHexString(byte[] input)
            {
                StringBuilder hexString = new StringBuilder(64);
    
                for (int i = 0; i < input.Length; i++)
                {
                    hexString.Append(String.Format("{0:X2}", input[i]));
                }
                return hexString.ToString();
            }
    
            public static void CreateKey(out string publicKey, out string privateKey)
            {
    
                RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024);
                RSAParameters parameter = rsaProvider.ExportParameters(false);
                publicKey = BytesToHexString(parameter.Exponent) + "," + BytesToHexString(parameter.Modulus);
                //    publicKeyXML = rsa.ToXmlString(true);
                privateKey = rsaProvider.ToXmlString(true);
            }
        }

    注:RSA只是非对称加密算法的一种,在非对称加密中使用的主要算法有:RSAElgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,对称加密算法中常用的算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK、AES等

    附Demo地址:http://download.csdn.net/detail/fcydxbd/9724553

    参考地址:http://blog.csdn.net/dslinmy/article/details/37362661

  • 相关阅读:
    sort函数详解
    C++重载运算符的规则详解
    poj3061-subsequence
    员工管理系统 :练习
    Jdbc 模拟登陆系统的练习
    有关String 的常用方法
    浅谈希尔排序-----摘录
    简单选择排序
    typedef 和define 的区别
    写博客的理由
  • 原文地址:https://www.cnblogs.com/zhangchengye/p/6233309.html
Copyright © 2011-2022 走看看