Rumah > hujung hadapan web > tutorial js > jQuery+C#实现参数RSA加密传输功能技巧分享

jQuery+C#实现参数RSA加密传输功能技巧分享

小云云
Lepaskan: 2018-01-06 10:15:08
asal
2285 orang telah melayarinya

本文主要介绍了jQuery+C#实现参数RSA加密传输功能,结合具体实例形式分析了js使用jsencrypt.js插件前端字符数据处理传输及C#后台数据转换与RSA加密相关操作技巧,并附带jsencrypt.js供读者下载参考使用,需要的朋友可以参考下,希望能帮助到大家。

本文实例讲述了jQuery+C#实现参数RSA加密传输功能。分享给大家供大家参考,具体如下:

注意:

参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了。

1、前端代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<!DOCTYPE html>

<html>

<head>

  <meta name="viewport" content="width=device-width" />

  <title>Login</title>

  <script src="jquery-1.10.2.min.js"></script>

  <script src="jsencrypt.min.js"></script>

  <script type="text/javascript">

    $(function () {

      var encrypt = new JSEncrypt();

      encrypt.setPublicKey($("#tra").val());

      var data = encrypt.encrypt("123456789");

      alert(data);

      $("#btn").click(function () {

        $.ajax({

          url: &#39;@Url.Action("Login")&#39;,

          data: "pwd=" + encodeURI(data).replace(/\+/g, &#39;%2B&#39;), //+号的处理:因为数据在网络上传输时,非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,而base64编码在传输到后端的时候,+会变成空格,因此先替换掉。后端再替换回来

          type: &#39;post&#39;,

          success: function (msg) {

            alert(msg);

          }

        });

      });

    });

  </script>

</head>

<body>

  <p>

    <input type="button" id="btn" value="点我" />

    <textarea id="tra" rows="15" cols="65">

      MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa4KHNwDX44gGmmIAtRu4gjVYt

GWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTl

      G3ihsCT6dT9H5B9OoeR7K9VWUesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6P

      SQyvdfiRdV4r07crpQIDAQAB

    </textarea>

    <hr/>

    注意+号的处理

  </p>

</body>

</html>

Salin selepas log masuk

2、后端代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

public class IndexController : Controller

{

    public ActionResult Login()

    {

      return View();

    }

    [HttpPost]

    public ActionResult Login(string pwd)

    {

      //密钥格式要生成pkcs#1格式的  而不是pkcs#8格式的

      string privateKey = @"MIICWwIBAAKBgQCa4KHNwDX44gGmmIAtRu4gjVYtGWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTlG3ihsCT6dT9H5B9OoeR7K9VW

UesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6PSQyvdfiRdV4r07crpQIDAQAB

AoGABb+3gdb+qeG0b1CogVsT/7//UOaTzPk/FGneKQQTf4SsN+H7lVhTYTG9ARFC

JyoWg8IXqmn2ljhywHPTWWD2RCZIn2sYT1sVkGb70EgHGQLBraFHElmw+DsVJ+nD

fBCfMrJ1TYXlwigjRkaueaoGgG8LdR8XD+Xs5LersPLjZgECQQCguSB7C4wF6oSw

EDmwNF8ffT5cQc1U2OIq6NBG8rafrjb7LsjhOd03pmY7i4LbW3Vvq4AhQpJEdF1C

vd+Sk/BBAkEA9rBhqnyumV09zFEomSX3zZu+bdhTzM4bJDfEa95swp1gANCVvF/t

DCnlBf51EhCWdeGSpARPUkQnXrYfFUDiZQJAAZEshuaa6+fYeVr/JP+tucHf3Mhr

dxtSQTbZ6QcuzqnFMXfIT6HfzU4bCxOWKAthPsB+VFSw1mgIDMGLL4OvwQJAJlVy

V9PYLezXVZCnBmVoBINXLCqZmxHMFey0kS6XKAbcjEPdgNBHPcSk2jGYb540Q00y

RFqHGPmORKF4Yw0aIQJAd5JRtD3z2MgP/vPoKHJNHqY8bboVcmwqVAm6xCZoTCZz

jNV1Cnsdf4wBV3LCDzYBy+xR4qYNUy5CFXN+8WzzAA==";

      try

      {

        RSACryptoServiceProvider rsaCryptoServiceProvider = CreateRsaProviderFromPrivateKey(privateKey);

        //把+号,再替换回来

        byte[] res = rsaCryptoServiceProvider.Decrypt(Convert.FromBase64String(pwd.Replace("%2B","+")), false);

        return Content(Encoding.UTF8.GetString(res));

      }

      catch (Exception exception)

      {

      }

      return Content("");

    }

    private RSACryptoServiceProvider CreateRsaProviderFromPrivateKey(string privateKey)

    {

      var privateKeyBits = System.Convert.FromBase64String(privateKey);

      var RSA = new RSACryptoServiceProvider();

      var RSAparams = new RSAParameters();

      using (BinaryReader binr = new BinaryReader(new MemoryStream(privateKeyBits)))

      {

        byte bt = 0;

        ushort twobytes = 0;

        twobytes = binr.ReadUInt16();

        if (twobytes == 0x8130)

          binr.ReadByte();

        else if (twobytes == 0x8230)

          binr.ReadInt16();

        else

          throw new Exception("Unexpected value read binr.ReadUInt16()");

        twobytes = binr.ReadUInt16();

        if (twobytes != 0x0102)

          throw new Exception("Unexpected version");

        bt = binr.ReadByte();

        if (bt != 0x00)

          throw new Exception("Unexpected value read binr.ReadByte()");

        RSAparams.Modulus = binr.ReadBytes(GetIntegerSize(binr));

        RSAparams.Exponent = binr.ReadBytes(GetIntegerSize(binr));

        RSAparams.D = binr.ReadBytes(GetIntegerSize(binr));

        RSAparams.P = binr.ReadBytes(GetIntegerSize(binr));

        RSAparams.Q = binr.ReadBytes(GetIntegerSize(binr));

        RSAparams.DP = binr.ReadBytes(GetIntegerSize(binr));

        RSAparams.DQ = binr.ReadBytes(GetIntegerSize(binr));

        RSAparams.InverseQ = binr.ReadBytes(GetIntegerSize(binr));

      }

      RSA.ImportParameters(RSAparams);

      return RSA;

    }

    private int GetIntegerSize(BinaryReader binr)

    {

      byte bt = 0;

      byte lowbyte = 0x00;

      byte highbyte = 0x00;

      int count = 0;

      bt = binr.ReadByte();

      if (bt != 0x02)

        return 0;

      bt = binr.ReadByte();

      if (bt == 0x81)

        count = binr.ReadByte();

      else

        if (bt == 0x82)

        {

          highbyte = binr.ReadByte();

          lowbyte = binr.ReadByte();

          byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };

          count = BitConverter.ToInt32(modint, 0);

        }

        else

        {

          count = bt;

        }

      while (binr.ReadByte() == 0x00)

      {

        count -= 1;

      }

      binr.BaseStream.Seek(-1, SeekOrigin.Current);

      return count;

    }

}

Salin selepas log masuk

相关推荐:

PHP+JS+rsa数据加密传输实现代码

Node.js 数据加密传输浅析

js用什么方法对ajax的post的数据进行加密传输php进行解密

Atas ialah kandungan terperinci jQuery+C#实现参数RSA加密传输功能技巧分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan