一、Rsa加密
1、RSA是第一种既可以用于数据加密,也可以用于数字签名的算法;
2、算法原理:
1)、随机产生两个大的质数m、n且m!=n,计算K1=mn;
2)、选择一个大于1小于k1的自然数k2,k2必须与(m-1)(n-1)互为素数;
3)、计算得到d—>d x k2=1(mod(m-1)(n-1));
4)、销毁mn;
最终产生的k1和k2为“公钥”,d为“私钥”,发送方使用k1进行加密,接收方使用d进行解密。
3、注意:
1、RSA的安全性依赖于大数分解,小于1024位的k1被认为是不安全的;
2、RSA的计算速度慢。
4、使用
1、生成密钥对
1 | /** |
2、公钥加密
1 | /** |
3、私钥加密
1 | /** |
有加密自然也得有解密
1、公钥解密
1 | /** |
2、私钥解密
1 | /** |
用到的全局变量
1 | // 非对称加密密钥算法 |
关于加密填充方式:之前以为上面这些操作就能实现rsa加解密,以为万事大吉了,呵呵,这事还没完,悲剧还是发生了,Android这边加密过的数据,服务器端死活解密不了,原来android系统的RSA实现是"RSA/None/NoPadding",而标准JDK实现是"RSA/None/PKCS1Padding"
,这造成了在android机上加密后无法在服务器上解密的原因,所以在实现的时候这个一定要注意。
二、DES加密
1、简单介绍
DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。
划重点 :DES不太安全。
2、静态秘钥DES加密方式使用
1)、DES加密代码
1 | /** |
2、DES解密代码
1 | /** |
3、动态秘钥加密方式
1、DES加密常用的常量
1 | private final static String HEX = "0123456789ABCDEF"; |
2、动态生成秘钥
1 | /* |
3、处理秘钥
方式一、
1 | // 对密钥进行处理 |
方式二
1 | / 对密钥进行处理 |
4、加密实现
1 | /** |
5、解密实现
1 | /** |
三、AES加密
1、简单介绍
高级加密标准
2、加密使用方法
1、AES用到的常量
1 | private final static String HEX = "0123456789ABCDEF"; |
2、动态生成秘钥
1 | public static String generateKey() { |
3、对秘钥进行处理
1 | private static byte[] getRawKey(byte[] seed) throws Exception { |
4、加密
1 | public static String encrypt(String key, String cleartext) { |
或者
1 | private static byte[] encrypt(String key, byte[] clear) throws Exception { |
5、解密
1 | public static String decrypt(String key, String encrypted) { |
或者
1 | private static byte[] decrypt(String key, byte[] encrypted) throws Exception { |
6、辅助方法
1 | //二进制转字符 |