密码学中,三重数据加密算法(英语:Triple Data Encryption Algorithm,缩写为TDEA,Triple DEA),或称3DES(Triple DES),是一种对称密钥加密块密码,相当于是对每个数据块应用三次数据加密标准(DES)算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
Java代码实现:
- import java.security.Key;
- import java.security.SecureRandom;
- import java.security.Security;
- import javax.crypto.Cipher;
- import javax.crypto.KeyGenerator;
- import javax.crypto.SecretKey;
- import javax.crypto.SecretKeyFactory;
- import javax.crypto.spec.DESedeKeySpec;
- import org.apache.commons.codec.binary.Hex;
- import org.bouncycastle.jce.provider.BouncyCastleProvider;
-
- public class DES3 {
-
- public static final String src = "3des test";
-
- public static void main(String[] args) {
- jdk3DES();
- bc3DES();
- }
-
- // 用jdk实现:
- public static void jdk3DES() {
- try {
- // 生成KEY
- KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
- // 必须长度是:112或168
- // keyGenerator.init(168);
- keyGenerator.init(new SecureRandom());
- // 产生密钥
- SecretKey secretKey = keyGenerator.generateKey();
- // 获取密钥
- byte[] bytesKey = secretKey.getEncoded();
-
- // KEY转换
- DESedeKeySpec desKeySpec = new DESedeKeySpec(bytesKey);
- SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
- Key convertSecretKey = factory.generateSecret(desKeySpec);
-
- // 加密
- Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
- cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
- byte[] result = cipher.doFinal(src.getBytes());
- System.out.println("jdk 3des encrypt:" + Hex.encodeHexString(result));
-
- // 解密
- cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
- result = cipher.doFinal(result);
- System.out.println("jdk 3des decrypt:" + new String(result));
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- // 用bouncy castle实现:
- public static void bc3DES() {
- try {
- Security.addProvider(new BouncyCastleProvider());
-
- // 生成KEY
- KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede", "BC");
- keyGenerator.getProvider();
- keyGenerator.init(168);
- // 产生密钥
- SecretKey secretKey = keyGenerator.generateKey();
- // 获取密钥
- byte[] bytesKey = secretKey.getEncoded();
-
- // KEY转换
- DESedeKeySpec desKeySpec = new DESedeKeySpec(bytesKey);
- SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
- Key convertSecretKey = factory.generateSecret(desKeySpec);
-
- // 加密
- Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
- cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
- byte[] result = cipher.doFinal(src.getBytes());
- System.out.println("bc 3des encrypt:" + Hex.encodeHexString(result));
-
- // 解密
- cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
- result = cipher.doFinal(result);
- System.out.println("bc 3des decrypt:" + new String(result));
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
4.对称加密算法-AES (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|