24、AES RSA加密处理记录

一、加密过程解释

前提:发送方为A,接受方为B
牢记:RSA为非对称加密,AES为对称加密。对称加密,属于传统的加密技术,加密和解密的秘钥都是相同的,AES的秘钥长度有128、192、256三种。非对称加密属于现加密技术,加密和解密的秘钥是不同的,一个是公钥,一个是私钥,常用于数字签名和加密秘钥。

1、B产生RSA密钥,并将对应的RSA公钥发给A
2、A得到RSA公钥;随机产生一个AES密钥;使用RSA公钥和RSA算法对AES密钥进行加密,并写入文件头部;用AES密钥和AES算法加密数据,写入文件尾部;将数据发给B
3、B收到数据,使用RSA密钥和RSA解密算法,解密头部,得到AES密钥;使用AES密钥和AES算法解密剩余数据。

二、代码实现

1、RSA加密

 1 String mingwen = "哈哈 加密也就那回事嘛";
 2 
 3         
 4 
 5         byte[] private_key;
 6 
 7         byte[] private_key_encode=null ;
 8 
 9         byte[] mingwen_encrypt=null;;
10 
11         byte[] mingwen_encrypt_encode=null;
12 
13          
14 
15         try {
16 
17             RSAUtil rsaUtil = RSAUtil.createRSAUtilWithRandomKeys();
18 
19 
20 
21             
22 
23             //加密后的私钥
24 
25             private_key = rsaUtil.getPrivateKeyBytes();
26 
27             private_key_encode = Base64.encode(private_key, 1);
28 
29             
30 
31             //经过rsa和base64加密后的数据
32 
33             mingwen_encrypt = rsaUtil.encrypt(mingwen.getBytes());
34 
35             mingwen_encrypt_encode = Base64.encode(mingwen_encrypt, 1);
36 
37             
38 
39         } catch (Exception e2) {
40 
41             // TODO Auto-generated catch block
42 
43             e2.printStackTrace();
44 
45         }
46 
47          
48 
49          try {
50 
51             //rsaUtil.genKeyPair();
52 
53         } catch (Exception e1) {
54 
55             // TODO Auto-generated catch block
56 
57             e1.printStackTrace();
58 
59         }
View Code

2、RSA解密

 1    //对RSA私钥进行BASE64解码
 2 
 3             byte[] private_key_1 =Base64.decode( private_key_encode,1);
 4                         
 5                         //产生RSAUtil的实例
 6 
 7                         RSAUtil rsaUtil_1 = new RSAUtil(null, private_key_1, null);
 8 
 9 
10                         //将密文进行BASE64解密
11 
12                         byte[]  miwen_encrypt = Base64.decode(mingwen_encrypt_encode, 1);
13 
14 
15                         //将密文进RSA解密
16 
17             byte[]  miwen= rsaUtil_1.decrypt(miwen_encrypt);
18 
19             
20 
21             try {
22 
23                 Log.e(tag,"mingwen is "+new String(miwen, "utf-8"));
24 
25                 
26 
27             } catch (UnsupportedEncodingException e) {
28 
29                 // TODO Auto-generated catch block
30 
31                 e.printStackTrace();
32 
33             }
View Code

3、AES解密

 1 //创建AES实例
 2 
 3         AESUtil aesUtil = new AESUtil("1234567812345678".getBytes());
 4 
 5       
 6 
 7         //Base64解码 说明:里边的参数为首先经过AES加密,然后BASE64
 8 
 9         byte[] encData = Base64.decode("oO7khHummGsw6dFPKu83C8blEjdVUDbhf2ii4c0ET5HoOIL5kClQR7gj/rP04fSj", 0);
10 
11         
12 
13         //AES解码
14 
15         byte[] decData = aesUtil.decrypt(encData);
16 
17         
18 
19         try {
20 
21             mMarque.setText(new String(decData, "utf-8"));
22 
23         } catch (UnsupportedEncodingException e) {
24 
25             e.printStackTrace();
26 
27             mMarque.setText(e.getMessage());
28 
29         }*/
View Code
原文地址:https://www.cnblogs.com/kunyashaw/p/4337283.html