有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。 注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用。包含DES、3DES和AES三种对称加密算法的编程使用,干货满满。 1.对称密码算法对称密码算法是当今应用范围最广,使用频率最高的加密算法。它不仅应用于软件行业,在硬件行业同样流行。各种基础设施凡是涉及到安全需求,都会优先考虑对称加密算法。 对称密码算法的加密密钥和解密密钥相同,对于大多数对称密码算法,加解密过程互逆。 (1)加解密通信模型 (2)特点:算法公开、计算量小、加密速度快、加密效率高 (3)弱点:双方都使用同样密钥,安全性得不到保证 对称密码有流密码和分组密码两种,但是现在普遍使用的是分组密码: (4)分组密码工作模式
这五种工作模式主要是密码学中算法在进行推导演算的时候所应用到的。 6.分组密码填充方式
7.常用对称密码:
先来看一下这三种算法的简单对比:
下面我们看如何使用 DES / 3DES / AES 三种算法实现 对称加密: 2.DES算法1.DES:数据加密标准,是对称加密算法领域中的典型算法 2.特点:密钥偏短(56位)、生命周期短(避免被破解) 3.Java实现 1)生成密钥 KeyGenerator keyGen = KeyGenerator.getInstance('DES');//密钥生成器keyGen.init(56);//初始化密钥生成器SecretKey secretKey = keyGen.generateKey();//生成密钥byte[] key = secretKey.getEncoded();//密钥字节数组 2)加密 SecretKey secretKey = new SecretKeySpec(key, 'DES');//恢复密钥Cipher cipher = Cipher.getInstance('DES');//Cipher完成加密或解密工作类cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,加密模式byte[] cipherByte = cipher.doFinal(data);//加密data 3)解密 SecretKey secretKey = new SecretKeySpec(key, 'DES');//恢复密钥Cipher cipher = Cipher.getInstance('DES');//Cipher完成加密或解密工作类cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式byte[] cipherByte = cipher.doFinal(data);//解密data 我们可以发现,加密解密我们只是设置了不同的模式而已。 3.3DES算法1.3DES:将密钥长度增至112位或168位,通过增加迭代次数提高安全性 2.缺点:处理速度较慢、密钥计算时间较长、加密效率不高 3.Java实现 1)生成密钥 KeyGenerator keyGen = KeyGenerator.getInstance('DESede');//密钥生成器keyGen.init(168); //可指定密钥长度为112或168,默认为168 SecretKey secretKey = keyGen.generateKey();//生成密钥byte[] key = secretKey.getEncoded();//密钥字节数组 2)3DES加密 SecretKey secretKey = new SecretKeySpec(key, 'DESede');//恢复密钥Cipher cipher = Cipher.getInstance('DESede');//Cipher完成加密或解密工作类cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式byte[] cipherByte = cipher.doFinal(data);//加密data 3)3DES解密 SecretKey secretKey = new SecretKeySpec(key, 'DESede');//恢复密钥Cipher cipher = Cipher.getInstance('DESede');//Cipher完成加密或解密工作类cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式byte[] cipherByte = cipher.doFinal(data);//解密data 4.AES算法(推荐使用)1.AES:高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击 2.特点:密钥建立时间短、灵敏性好、内存需求低、安全性高 3.Java实现 1)生成密钥 KeyGenerator keyGen = KeyGenerator.getInstance('AES');//密钥生成器keygen.init(128); //默认128,获得无政策权限后可为192或256SecretKey secretKey = keyGen.generateKey();//生成密钥byte[] key = secretKey.getEncoded();//密钥字节数组 2)AES加密 SecretKey secretKey = new SecretKeySpec(key, 'AES');//恢复密钥Cipher cipher = Cipher.getInstance('AES');//Cipher完成加密或解密工作类cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式byte[] cipherByte = cipher.doFinal(data);//加密data 3)AES解密 SecretKey secretKey = new SecretKeySpec(key, 'AES');//恢复密钥Cipher cipher = Cipher.getInstance('AES');//Cipher完成加密或解密工作类cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式byte[] cipherByte = cipher.doFinal(data);//解密data 为了方便使用,我对DES / 3DES / AES 三种算法进行了工具类编写,地址:https://github.com/smartbetter/Android-UtilsLibrary (新增DES/3DES/AES工具类)。 |
|