| 副标题[/!--empirenews.page--]   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位的密钥按位替代或交换的方法形成密文组的加密方法。 
 引入Bouncy Castle依赖: <dependency>    <groupId>org.bouncycastle</groupId>    <artifactId>bcprov-jdk15</artifactId>    <version>1.46</version> </dependency> 
 引入Commons Codec依赖: <dependency>    <groupId>commons-codec</groupId>    <artifactId>commons-codec</artifactId>    <version>1.10</version> </dependency> 
 Java代码实现: import java.security.Key; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import org.apache.commons.codec.binary.Hex; import org.bouncycastle.jce.provider.BouncyCastleProvider;  public class DES {    public static final String src = "des test";    public static void main(String[] args) {     jdkDES();     bcDES();   }    // 用jdk实现:   public static void jdkDES() {     try {       // 生成KEY       KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");       keyGenerator.init(56);       // 产生密钥       SecretKey secretKey = keyGenerator.generateKey();       // 获取密钥       byte[] bytesKey = secretKey.getEncoded();        // KEY转换       DESKeySpec desKeySpec = new DESKeySpec(bytesKey);       SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");       Key convertSecretKey = factory.generateSecret(desKeySpec);        // 加密       Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");       cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);       byte[] result = cipher.doFinal(src.getBytes());       System.out.println("jdk des encrypt:" + Hex.encodeHexString(result));        // 解密       cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);       result = cipher.doFinal(result);       System.out.println("jdk des decrypt:" + new String(result));     } catch (Exception e) {       e.printStackTrace();     }   }    // 用bouncy castle实现:   public static void bcDES() {     try {       Security.addProvider(new BouncyCastleProvider());        // 生成KEY       KeyGenerator keyGenerator = KeyGenerator.getInstance("DES", "BC");       keyGenerator.getProvider();       keyGenerator.init(56);       // 产生密钥       SecretKey secretKey = keyGenerator.generateKey();       // 获取密钥       byte[] bytesKey = secretKey.getEncoded();        // KEY转换       DESKeySpec desKeySpec = new DESKeySpec(bytesKey);       SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");       Key convertSecretKey = factory.generateSecret(desKeySpec);        // 加密       Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");       cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);       byte[] result = cipher.doFinal(src.getBytes());       System.out.println("bc des encrypt:" + Hex.encodeHexString(result));        // 解密       cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);       result = cipher.doFinal(result);       System.out.println("bc des decrypt:" + new String(result));     } catch (Exception e) {       e.printStackTrace();     }   } } 
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |