加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

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

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

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

1.对称加密算法概述

对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。

在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。

不足之处是,交易双方都使用同样钥匙,安全性得不到保证。

在计算机系统中广泛使用的对称加密算法有DES和IDEA等。因为DES近年来屡屡被破解,所以,美国国家标准局倡导的AES即将作为新标准取代DES。

2.对称加密算法-DES

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。

明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

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

引入Bouncy Castle依赖:

  1. <dependency> 
  2.    <groupId>org.bouncycastle</groupId> 
  3.    <artifactId>bcprov-jdk15</artifactId> 
  4.    <version>1.46</version> 
  5. </dependency> 

引入Commons Codec依赖:

  1. <dependency> 
  2.    <groupId>commons-codec</groupId> 
  3.    <artifactId>commons-codec</artifactId> 
  4.    <version>1.10</version> 
  5. </dependency> 

Java代码实现:

  1. import java.security.Key; 
  2. import java.security.Security; 
  3. import javax.crypto.Cipher; 
  4. import javax.crypto.KeyGenerator; 
  5. import javax.crypto.SecretKey; 
  6. import javax.crypto.SecretKeyFactory; 
  7. import javax.crypto.spec.DESKeySpec; 
  8. import org.apache.commons.codec.binary.Hex; 
  9. import org.bouncycastle.jce.provider.BouncyCastleProvider; 
  10.  
  11. public class DES { 
  12.  
  13.   public static final String src = "des test"; 
  14.  
  15.   public static void main(String[] args) { 
  16.     jdkDES(); 
  17.     bcDES(); 
  18.   } 
  19.  
  20.   // 用jdk实现: 
  21.   public static void jdkDES() { 
  22.     try { 
  23.       // 生成KEY 
  24.       KeyGenerator keyGenerator = KeyGenerator.getInstance("DES"); 
  25.       keyGenerator.init(56); 
  26.       // 产生密钥 
  27.       SecretKey secretKey = keyGenerator.generateKey(); 
  28.       // 获取密钥 
  29.       byte[] bytesKey = secretKey.getEncoded(); 
  30.  
  31.       // KEY转换 
  32.       DESKeySpec desKeySpec = new DESKeySpec(bytesKey); 
  33.       SecretKeyFactory factory = SecretKeyFactory.getInstance("DES"); 
  34.       Key convertSecretKey = factory.generateSecret(desKeySpec); 
  35.  
  36.       // 加密 
  37.       Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
  38.       cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey); 
  39.       byte[] result = cipher.doFinal(src.getBytes()); 
  40.       System.out.println("jdk des encrypt:" + Hex.encodeHexString(result)); 
  41.  
  42.       // 解密 
  43.       cipher.init(Cipher.DECRYPT_MODE, convertSecretKey); 
  44.       result = cipher.doFinal(result); 
  45.       System.out.println("jdk des decrypt:" + new String(result)); 
  46.     } catch (Exception e) { 
  47.       e.printStackTrace(); 
  48.     } 
  49.   } 
  50.  
  51.   // 用bouncy castle实现: 
  52.   public static void bcDES() { 
  53.     try { 
  54.       Security.addProvider(new BouncyCastleProvider()); 
  55.  
  56.       // 生成KEY 
  57.       KeyGenerator keyGenerator = KeyGenerator.getInstance("DES", "BC"); 
  58.       keyGenerator.getProvider(); 
  59.       keyGenerator.init(56); 
  60.       // 产生密钥 
  61.       SecretKey secretKey = keyGenerator.generateKey(); 
  62.       // 获取密钥 
  63.       byte[] bytesKey = secretKey.getEncoded(); 
  64.  
  65.       // KEY转换 
  66.       DESKeySpec desKeySpec = new DESKeySpec(bytesKey); 
  67.       SecretKeyFactory factory = SecretKeyFactory.getInstance("DES"); 
  68.       Key convertSecretKey = factory.generateSecret(desKeySpec); 
  69.  
  70.       // 加密 
  71.       Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
  72.       cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey); 
  73.       byte[] result = cipher.doFinal(src.getBytes()); 
  74.       System.out.println("bc des encrypt:" + Hex.encodeHexString(result)); 
  75.  
  76.       // 解密 
  77.       cipher.init(Cipher.DECRYPT_MODE, convertSecretKey); 
  78.       result = cipher.doFinal(result); 
  79.       System.out.println("bc des decrypt:" + new String(result)); 
  80.     } catch (Exception e) { 
  81.       e.printStackTrace(); 
  82.     } 
  83.   } 

(编辑:辽源站长网)

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

推荐文章
    热点阅读