Android常用的数据加密方式代码详解

  

  

Android很多场合需要使用到数据加密,比如:本地登录密码加密,网络传输数据加密,等。在Android中一般的加密方式有如下:

  

亦或加密,
  AES加密,
  RSA非对称加密,
  MD5加密算法,

  

当然还有其他的方式,这里暂且介绍以上四种加密算法的使用方式。

  

  

什么是亦或加密?

  

亦或加密是对某个字节进行亦或运算,比如字节^ K=V,这是加密过程,
  当你把V ^ K得到的结果就是一个,也就是V ^ K=一个,这是一个反向操作过程,解密过程。
  

  

亦或操作效率很高,当然亦或加密也是比较简单的加密方式,且亦或操作不会增加空间,源数据多大亦或加密后数据依然是多大。
  

  

示例代码如下:

     /* *   *亦或加解密,适合对整个文件的部分加密,比如文件头部,和尾部   *对文件文件头部和尾部加密,适合拉链压缩包加密   *   * @param源需要加密的文件   * @param侦破加密后保存文件名   * @param键加密的关键   */公共静态孔隙encryptionFile(文件来源、文件依据,int键){   FileInputStream fis=零;   FileOutputStream安全系数=零;   尝试{   fis=new FileInputStream(源);   安全系数=new FileOutputStream(依据);   int大?2048;   字节迷[]=新字节(大小);   int数=fis.read(浅黄色);/* * zip包头部加密*/for (int i=0;我& lt;计数;我+ +){   安全系数。写(浅黄色[我]^键);   }   而(真){   数=fis.read(浅黄色);/* * zip包结尾加密*/如果(计数& lt;大小){   for (int j=0;j & lt;计数;j + +) {   安全系数。写(浅黄色[j] ^键);   }   打破;   }   安全系数。写(浅黄色,0,数);   }   fos.flush ();   }   抓住(IOException e) {   e.printStackTrace ();   }   最后{   尝试{   如果(fis !=null) {   fis.close ();   }   如果(安全系数!=null) {   fos.close ();   }   }   抓住(IOException e) {   e.printStackTrace ();   }   }   }/* *   *亦或加解密,适合对整个文件加密   *   * @param源需要加密文件的路径   * @param侦破加密后保存文件的路径   * @param键加密秘钥密钥   */私有静态孔隙encryptionFile(源字符串,字符串相同,int键){   FileInputStream fis=零;   FileOutputStream安全系数=零;   尝试{   fis=new FileInputStream(源);   安全系数=new FileOutputStream(依据);   int读;   在((=fis.read ()) !=1) {   安全系数。写(读^键);   }   fos.flush ();   }   抓住(IOException e) {   e.printStackTrace ();   }   最后{   尝试{   如果(fis !=null) {   fis.close ();   }   如果(安全系数!=null) {   fos.close ();   }   }   抓住(IOException e) {   e.printStackTrace ();   }   }   }      

可以对文件的部分加密,比如zip压缩包,就可以对头部和尾部加密,因为拉链头部和尾部藏有文件压缩相关的信息,所有,我们只对头部和尾部采用亦或加密算法,即可对整个邮政文件加密,当你不解密试图加压是会失败的。
  也可以对整个文件进行亦或加密算法,所以你解密的时候其实是一个逆向的过程,使用同样的方法同样的关键即可对加密的文件解密。当然以后加密的安全性可想而知,不是很安全,所以,亦或加密算法一般使用在不太重要的场景。由于亦或算法很快,所以加密速度也很快。
  

  

  

什么是AES加密

  

AES对称加密
  

  

高级加密标准(英语:高级加密标准,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
  

  

Android中的AES加密秘钥钥必须为16/24/32位字节,否则抛异常
  

  

示例代码:

        私有静态最终字符串标签=癊ncryptUtils”;   私人最终静态int MODE_ENCRYPTION=1;   私人最终静态int MODE_DECRYPTION=2;   私人最终的静态字符串AES_KEY=" xjp_12345 ! ^ -=42 #”;//AES秘钥密钥,必须为16位   私有静态byte[]加密(int模式,byte[]内容字符串pwd) {   尝试{   密码密码=. getinstance (“AES/CFB/NoPadding”);//AES加密模式,在循环加密模式   SecretKeySpec keySpec=new SecretKeySpec (pwd.getBytes (“utf - 8”)、AES);//AES加密方式   IvParameterSpec ivSpec=new IvParameterSpec (pwd.getBytes (" utf - 8 "));   密码。init(模式==MODE_ENCRYPTION & # 63;密码。ENCRYPT_MODE:密码。DECRYPT_MODE、keySpec ivSpec);   返回cipher.doFinal(内容);   }   抓住(NoSuchAlgorithmException | NoSuchPaddingException |   InvalidKeyException | IllegalBlockSizeException |   BadPaddingException | InvalidAlgorithmParameterException e) {   e.printStackTrace ();   日志。e(标签,“加密失败……错:“+ e.getMessage ());   }   捕获(异常e) {   e.printStackTrace ();   日志。e(标签,“encryption1失败……错:“+ e.getMessage ());   }   返回null;   }/* *   * AES加密   *   * @param源需要加密的文件路径   * @param桌子加密后的文件路径   */公共静态孔隙encryptByAES(字符串源字符串dest) {   encryptByAES (MODE_ENCRYPTION、来源、桌子);   }   公共静态孔隙encryptByAES (int模式,源字符串,字符串dest) {   日志。我(标签,“开始===encryptByAES ");   FileInputStream fis=零;   FileOutputStream安全系数=零;   尝试{   fis=new FileInputStream(源);   安全系数=new FileOutputStream(桌子);   int大?2048;   字节迷[]=新字节(大小);   字节buffResult [];   而((fis.read(浅黄色))!=1){   buffResult=加密(模式、浅黄色、AES_KEY);   如果(buffResult !=null) {   fos.write (buffResult);   }   }   日志。我(标签,“结束===encryptByAES”);   }   抓住(IOException e) {   e.printStackTrace ();   日志。e(标签,“encryptByAES失败犯错:“+ e.getMessage ());   }   最后{   尝试{   如果(fis !=null) {   fis.close ();   }   如果(安全系数!=null) {   fos.close ();   }   }   抓住(IOException e) {   e.printStackTrace ();   }   }   }/* *   * AES解密   *   * @param源需要解密的文件路径   * @param dest解密后保存的文件路径   */公共静态孔隙decryptByAES(字符串源字符串dest) {   encryptByAES (MODE_DECRYPTION、来源、桌子);   }

Android常用的数据加密方式代码详解