配色: 字号:
RSA算法 Android JAVA C#互通
2016-08-29 | 阅:  转:  |  分享 
  
RSA算法AndroidJAVAC#互通

RSA算法属非对称加密算法,在实际使用中,往往客户端使用公钥进行加密传递敏感数据,服务端server使用私钥进行解密,这样防止中间人从网络获取敏感数据的明文。

RsaHelper



Android客户端调用示例:



复制代码

1protectedvoidonCreate(BundlesavedInstanceState)

2{

3super.onCreate(savedInstanceState);

4setContentView(R.layout.activity_main);

5

6btnencode=(Button)findViewById(R.id.btnencode);

7btndecode=(Button)findViewById(R.id.btndecode);

8txtinit=(EditText)findViewById(R.id.txtinit);

9txtencoded=(EditText)findViewById(R.id.txtencoded);

10txtencoded2=(EditText)findViewById(R.id.txtencoded2);

11lbldecoded=(TextView)findViewById(R.id.lbldecoded);

12

13btnencode.setOnClickListener(newOnClickListener()

14{

15

16@Override

17publicvoidonClick(Viewv)

18{

19//TODOAuto-generatedmethodstub

20

21try

22{

23Stringstrinit=txtinit.getText().toString().trim();

24Stringrs=RsaHelper.encryptDataFromStr(strinit,publicKey);

25txtencoded.setText(rs);

26Log.e("decoded",rs);//将rs值拿到c#服务器可解密成功

27}

28catch(Exceptione)

29{

30e.printStackTrace();

31}

32

33}

34});

35

36btndecode.setOnClickListener(newOnClickListener()

37{

38

39@Override

40publicvoidonClick(Viewv)

41{

42

43try

44{

45Stringstrtxtencoded=txtencoded2.getText().toString().trim();

46

47//C#端加密的内容也可解密

48//strtxtencoded="E7lS+MJCDImpS664YmwbFA+OqYlrLzPOw4/Lkg5aUnjZ/ztQkuh+6LtLGLU5T4aLpErVgI1+1tj74fnz1vv4XApK797uvxAiVIY2izZfwIF4M993Bx7Yy7JfciobXowp+eKsxhp4yrLuOZbM1kdNyhfvvOlMZNiLaXLpKyZat6A=";

49

50Stringrs=newString(RsaHelper.decryptData(

51Base64Helper.decode(strtxtencoded),privateKey),"UTF-8");

52lbldecoded.setText(rs);

53Log.e("encoded",rs);

54}

55catch(Exceptione)

56{

57e.printStackTrace();

58}

59

60}

61});

62

63}

复制代码





JAVA客户端程序加密示例:



JAVAClient









服务器端C#代码:



RSAHelper

C#调用示例



复制代码

1publicvoidTestDecry()

2{

3//java端的密文

4//以下为android端加密后的密文

5stringpwd=

6"VpEiGrV8BND+30z/5n03eS7UW/0ZF7NgVnCKPp/5IrpGRI/aoDb0iNehTez8Gcnl1C/g0q71UjLVMjywysbdoTBCaLBq/x85Fw31NNvzc5XOW4St01Q3+78JKkX1CCmSbOPpb2lvMb0D8iGiq3gLt3UZZpLLkbyBZDaXP2oHaIc=";

7//Convert.ToBase64String(bytes);

8

9//服务端私钥

10stringprivateKey="w9u2HfdbNZrmAUmXPbNmrhfy861qX4mzcCn69Ksl03Nz+Fq9gINZeN/vrfcWBzMyYxb2/J2TnGtpCLc0ls6gOTKDPbnQHwHr3oCzfvxNwvT2uoKQUBl4xMFw0TmvufMbheq6q3FCXUkVkAUC1cbQ/S9DqNp/veYcAavRDXtFdD0=AQAB

6tzaLZmY+hLLAifunWwcdUSfqTUvKOO5bJ8M1Zt34en40tfBaH9zml9gP8cmXaWyfpiZgHlPS9xlkLngudAiJw==

1Xw2E1ufXsCM2JZahB6PH9pCgfD4XPjrqxF9xOWVvfbPmVBZByBIHYRs8ifbjIPvSKuaCfVFVStoIcOYrT9I+w==mS4iPsuHMtM/BND2mEYC6ZkwaTP+5jRgo6+4tzkHH5lyaFHAG1/FDlJWfEJvi3SezmLI+zojtd6xf4s8PvS40Q==I91kMEhaM87hWpmXx05i+RTvy2iyMNxYqzqbCHMRfwJxye3npvzTYLIYo23ywl5/www.wang027.com2pOJo1ajOTW7nsB/a8uP9Q==EtYQvvBViXf7A5bgh+H4xLlBezD0yziBigoP/xcg1mcuI9Kb9rtPq64hQsajDYeNmm0Ibkxz9ihHr8+uWtdi5w==HSivw2RZKvDlv1lSb/gumEqufALcbF7W3SMS3qxAVGvC3z27Ks/jWTCVwWOg3u+LV99KZC+dk1MWbxq/dJhMmBSiHOT6Sg7wvNMmX58zHl7Bhs702henzbr7CkiWrUcy3pVigr4olT9FlkjQkeEu9VfVW4TRGUDUkixTeh9MMC0=
";

11

12//解密

13stringuserpwd=RSAHelper.Load(privateKey:privateKey).Decrypt(pwd);

14

15

16

17//C#端用公钥加密

18stringpublickey=@"w9u2HfdbNZrmAUmXPbNmrhfy861qX4mzcCn69Ksl03Nz+Fq9gINZeN/vrfcWBzMyYxb2/J2TnGtpCLc0ls6gOTKDPbnQHwHr3oCzfvxNwvT2uoKQUBl4xMFw0TmvufMbheq6q3FCXUkVkAUC1cbQ/S9DqNp/veYcAavRDXtFdD0=AQAB";

19

20varabc=RSAHelper.Load(publicKey:publickey).Encrypt("abc123中文");//查将此生成的值拿到android工程中解密,至此达到RSA的C#—Android双方互通

21

22//C#端也可解密

23stringuserpwd2=RSAHelper.Load(privateKey:privateKey).Decrypt(abc);

24

25

26}

复制代码





可运行的示例代码下载:



RSA算法JAVA公钥加密,C#私钥解密



RSA算法AndroidC#互通

献花(0)
+1
(本文系thedust79首藏)