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=AQAB6tzaLZmY+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#互通
|
|