加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

DES、3DES、AES、PBE对称加密算法实现及应用

发布时间:2019-08-03 06:35:58 所属栏目:策划 来源:薛勤
导读:1.对称加密算法概述 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆

PBE算法在加密过程中并不是直接使用口令来加密,而是加密的密钥由口令生成,这个功能由PBE算法中的KDF函数完成。KDF函数的实现过程为:将用户输入的口令首先通过“盐”(salt)的扰乱产生准密钥,再将准密钥经过散列函数多次迭代后生成最终加密密钥,密钥生成后,PBE算法再选用对称加密算法对数据进行加密,可以选择DES、3DES、RC5等对称加密算法。

具体实现如下:

DES、3DES、AES、PBE对称加密算法实现及应用

DES、3DES、AES、PBE对称加密算法实现及应用

Java代码实现:

  1. import java.security.Key; 
  2. import java.security.SecureRandom; 
  3. import javax.crypto.Cipher; 
  4. import javax.crypto.SecretKeyFactory; 
  5. import javax.crypto.spec.PBEKeySpec; 
  6. import javax.crypto.spec.PBEParameterSpec; 
  7. import org.apache.commons.codec.binary.Hex; 
  8.  
  9. public class PBE { 
  10.  
  11.   public static final String src = "pbe test"; 
  12.  
  13.   public static void main(String[] args) { 
  14.     jdkPBE(); 
  15.   } 
  16.  
  17.   // 用jdk实现: 
  18.   public static void jdkPBE() { 
  19.     try { 
  20.       // 初始化盐 
  21.       SecureRandom random = new SecureRandom(); 
  22.       byte[] salt = random.generateSeed(8); 
  23.  
  24.       // 口令与密钥 
  25.       String password = "timliu"; 
  26.       PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray()); 
  27.       SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES"); 
  28.       Key key = factory.generateSecret(pbeKeySpec); 
  29.  
  30.       // 加密 
  31.       PBEParameterSpec pbeParameterSpac = new PBEParameterSpec(salt, 100); 
  32.       Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES"); 
  33.       cipher.init(Cipher.ENCRYPT_MODE, key, pbeParameterSpac); 
  34.       byte[] result = cipher.doFinal(src.getBytes()); 
  35.       System.out.println("jdk pbe encrypt:" + Hex.encodeHexString(result)); 
  36.  
  37.       // 解密 
  38.       cipher.init(Cipher.DECRYPT_MODE, key, pbeParameterSpac); 
  39.       result = cipher.doFinal(result); 
  40.       System.out.println("jdk pbe decrypt:" + new String(result)); 
  41.     } catch (Exception e) { 
  42.       e.printStackTrace(); 
  43.     } 
  44.   } 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读