安卓加密:Android 加密方式

加密方式分为rsa,aes,des,md5,base64,异域加密

一:rsa加密

RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。

RSA算法原理如下:

1.随机选择两个大质数p和q,p不等于q,计算N=pq; 
2.选择一个大于1小于N的自然数e,e必须与(p-1)(q-1)互素。 
3.用公式计算出d:d×e = 1 (mod (p-1)(q-1)) 。
4.销毁p和q。

最终得到的N和e就是“公钥”,d就是“私钥”,发送方使用N去加密数据,接收方只有使用d才能解开数据内容。

RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,这是RSA最大的缺陷,因此通常只能用于加密少量数据或者加密密钥,但RSA仍然不失为一种高强度的算法。

Base64编码的用处?

    在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

Base64具体实现

1.)字符串进行Base64编码
String encodedString = Base64.encodeToString("whoislcj".getBytes(), Base64.DEFAULT); Log.e("Base64", "Base64---->" + encodedString);
2.)字符串进行Base64解码
String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT)); Log.e("Base64", "Base64---->" + decodedString);
 3.)对文件进行Base64编码

复制代码

File file = new File("/storage/emulated/0/pimsecure_debug.txt");FileInputStream inputFile = null;try { inputFile = new FileInputStream(file); byte[] buffer = new byte[(int) file.length()]; inputFile.read(buffer); inputFile.close(); encodedString = Base64.encodeToString(buffer, Base64.DEFAULT); Log.e("Base64", "Base64---->" + encodedString);} catch (Exception e) { e.printStackTrace();}

复制代码

 4.)对文件进行Base64解码

复制代码

File desFile = new File("/storage/emulated/0/pimsecure_debug_1.txt");FileOutputStream fos = null;try { byte[] decodeBytes = Base64.decode(encodedString.getBytes(), Base64.DEFAULT); fos = new FileOutputStream(desFile); fos.write(decodeBytes); fos.close();} catch (Exception e) { e.printStackTrace();}

复制代码

六:异域加密

 

 

      异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能。

异或运算使用场景?

  • 两个变量的互换(不借助第三个变量)

  • 数据的简单加密解密

异或加密解密实现?

1.固定key的方式

这种方式加密解密 算法一样

复制代码

public byte[] encrypt(byte[] bytes) { if (bytes == null) { return null; } int len = bytes.length; int key = 0x12; for (int i = 0; i < len; i++) { bytes[i] ^= key; } return bytes; }

复制代码

测试加密解密

byte[] bytes = encrypt("whoislcj".getBytes());//加密 String str1 = new String(encrypt(bytes));//解密
2.不固定key的方式

 加密实现

复制代码

public byte[] encrypt(byte[] bytes) { if (bytes == null) { return null; } int len = bytes.length; int key = 0x12; for (int i = 0; i < len; i++) { bytes[i] = (byte) (bytes[i] ^ key); key = bytes[i]; } return bytes; }

复制代码

解密实现

复制代码

public byte[] decrypt(byte[] bytes) { if (bytes == null) { return null; } int len = bytes.length; int key = 0x12; for (int i = len - 1; i > 0; i--) { bytes[i] = (byte) (bytes[i] ^ bytes[i - 1]); } bytes[0] = (byte) (bytes[0] ^ key); return bytes; }

复制代码

测试

byte[] bytes = encrypt("whoislcj".getBytes());//加密 String str1 = new String(decrypt(bytes));//解密

转载于:https://my.oschina.net/zhongyingjie/blog/1588620

相关推荐

相关文章