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 }
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 }
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 }*/