java des加解密啊

简介: 【2月更文挑战第8天】

Java DES加解密

简介

DES(Data Encryption Standard)是一种对称加密算法,广泛用于数据保密领域。在Java中,我们可以使用javax.crypto包提供的类和方法来进行DES加解密操作。 本文将介绍如何在Java中使用DES算法进行加解密操作,并提供示例代码以帮助理解实际应用。

密钥生成

在使用DES进行加解密之前,我们需要生成一个密钥。密钥是一个长度为8字节的字节数组,可以通过javax.crypto.KeyGenerator类来生成。 下面是生成DES密钥的示例代码:

javaCopy code
import javax.crypto.KeyGenerator;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
public class DESKeyGenerator {
    public static Key generateKey() throws NoSuchAlgorithmException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        return keyGenerator.generateKey();
    }
    public static void main(String[] args) {
        try {
            Key key = generateKey();
            System.out.println("生成的密钥:" + key);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用KeyGenerator.getInstance("DES")获取一个DES算法的密钥生成器,然后调用generateKey()方法生成一个密钥。生成的密钥可以通过key.toString()方法获得。

加密

接下来我们将使用生成的密钥对数据进行加密。在Java中,我们可以使用javax.crypto.Cipher类来进行加密操作。加密过程需要指定加密模式和填充方式。 下面是使用DES算法对数据进行加密的示例代码:

javaCopy code
import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.Key;
public class DESEncryption {
    public static byte[] encrypt(String data, Key key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
    }
    public static void main(String[] args) {
        try {
            Key key = DESKeyGenerator.generateKey();
            String data = "Hello, DES encryption!";
            byte[] encryptedData = encrypt(data, key);
            System.out.println("加密后的数据:" + new String(encryptedData, StandardCharsets.UTF_8));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用Cipher.getInstance("DES/ECB/PKCS5Padding")获取一个DES算法的加密实例,并指定加密模式为ECB,填充方式为PKCS5Padding。然后通过调用cipher.init(Cipher.ENCRYPT_MODE, key)方法初始化加密器,将数据转换为字节数组,并使用cipher.doFinal(data.getBytes(StandardCharsets.UTF_8))进行加密操作。

解密

完成加密后,我们可以使用相同的密钥对加密的数据进行解密。解密过程与加密过程类似,也需要指定解密模式和填充方式。 下面是使用DES算法对数据进行解密的示例代码:

javaCopy code
import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.Key;
public class DESDecryption {
    public static String decrypt(byte[] encryptedData, Key key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedData = cipher.doFinal(encryptedData);
        return new String(decryptedData, StandardCharsets.UTF_8);
    }
    public static void main(String[] args) {
        try {
            Key key = DESKeyGenerator.generateKey();
            byte[] encryptedData = { /* 加密后的数据 */ };
            String decryptedData = decrypt(encryptedData, key);
            System.out.println("解密后的数据:" + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们同样使用Cipher.getInstance("DES/ECB/PKCS5Padding")获取一个DES算法的解密实例,并通过调用cipher.init(Cipher.DECRYPT_MODE, key)方法初始化解密器,然后使用cipher.doFinal(encryptedData)对数据进行解密操作。

示例代码:DES加解密实际应用

在实际应用场景中,我们可以使用DES加解密算法来保护敏感数据的安全性。例如,在用户注册过程中,需要对用户的密码进行加密存储,以防止密码泄露导致的安全问题。 下面是一个示例代码,演示了如何使用DES算法对用户密码进行加密和解密:

javaCopy code
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class PasswordEncryption {
    private static final String SECRET_KEY = "ThisIsSecretKey";
    public static String encrypt(String password) {
        try {
            SecretKeySpec secretKey = generateSecretKey();
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encryptedBytes = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8));
            return Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public static String decrypt(String encryptedPassword) {
        try {
            SecretKeySpec secretKey = generateSecretKey();
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedPassword));
            return new String(decryptedBytes, StandardCharsets.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    private static SecretKeySpec generateSecretKey() {
        byte[] keyBytes = SECRET_KEY.getBytes(StandardCharsets.UTF_8);
        byte[] truncatedKeyBytes = new byte[8];
        System.arraycopy(keyBytes, 0, truncatedKeyBytes, 0, 8);
        return new SecretKeySpec(truncatedKeyBytes, "DES");
    }
    public static void main(String[] args) {
        String originalPassword = "myPassword123";
        // 加密密码
        String encryptedPassword = encrypt(originalPassword);
        System.out.println("加密后的密码:" + encryptedPassword);
        // 解密密码
        String decryptedPassword = decrypt(encryptedPassword);
        System.out.println("解密后的密码:" + decryptedPassword);
    }
}

在上述代码中,我们使用一个固定的密钥(SECRET_KEY)和DES算法来对用户的密码进行加密和解密。通过encrypt方法对原始密码进行加密,返回加密后的密码字符串;通过decrypt方法对加密后的密码进行解密,返回解密后的密码字符串。

Java 提供了多种对称加密算法,常见的有以下几种:

  1. DES(Data Encryption Standard):DES 是一种对称加密算法,使用 56 位密钥对数据进行加密和解密。然而,由于 DES 密钥长度较短,已经不再被认为是安全的加密算法。
  2. 3DES(Triple Data Encryption Standard):3DES 是对 DES 算法的改进,通过多次的 DES 加密运算来提高安全性。它使用 168 位密钥对数据进行加密和解密。
  3. AES(Advanced Encryption Standard):AES 是一种高级加密标准,已经成为目前使用最广泛的对称加密算法之一。它支持 128 位、192 位和 256 位密钥长度,因此提供了更高的安全性。
  4. RC(Rivest Cipher)系列:RC 系列也是一组对称加密算法,其中最常见的是 RC4 和 RC5。RC4 是一种流加密算法,适用于数据流加密,比如 SSL/TLS 加密通信。RC5 是一种分组加密算法,支持可变的密钥和分组长度。 在 Java 中,对称加密算法通常通过 javax.crypto 包提供的 Cipher 类实现。下面是一个使用 Java 对称加密算法的示例代码:
javaCopy code
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class SymmetricEncryption {
    public static void main(String[] args) throws Exception {
        // 生成对称密钥
        SecretKey secretKey = generateSecretKey();
        String originalMessage = "Hello, World!";
        System.out.println("原始消息: " + originalMessage);
        // 使用对称密钥进行加密
        String encryptedMessage = encrypt(originalMessage, secretKey);
        System.out.println("加密后的消息: " + encryptedMessage);
        // 使用对称密钥进行解密
        String decryptedMessage = decrypt(encryptedMessage, secretKey);
        System.out.println("解密后的消息: " + decryptedMessage);
    }
    public static SecretKey generateSecretKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(256); // 使用 256 位密钥长度
        return keyGenerator.generateKey();
    }
    public static String encrypt(String message, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(message.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }
    public static String decrypt(String encryptedMessage, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedMessage));
        return new String(decryptedBytes, StandardCharsets.UTF_8);
    }
}

在上述代码中,我们使用 AES 对称加密算法对消息进行加密和解密。generateSecretKey 方法用来生成 AES 密钥(256 位密钥长度);encrypt 方法使用密钥对消息进行加密,并将加密结果进行 Base64 编码;decrypt 方法使用密钥对加密后的消息进行解密,最终返回解密后的原始消息。

总结

本文介绍了在Java中使用DES算法进行加解密操作的基本流程。通过生成密钥,加密数据和解密数据的示例代码,希望读者能够了解并掌握DES加解密的基本使用方法。 当涉及到实际应用时,请注意密钥的保密性和安全性,以保证数据的机密性和完整性。

相关文章
|
3月前
|
算法 安全 Java
Java 实现 RSA 非对称加密算法-加解密和签名验签
Java 实现 RSA 非对称加密算法-加解密和签名验签
|
4月前
|
Java 数据安全/隐私保护
Java 中使用 OpenSSL 生成公钥私钥进行数据加解密
Java 中使用 OpenSSL 生成公钥私钥进行数据加解密
65 0
|
5月前
|
算法 搜索推荐 Java
DES - 对称加密算法简要介绍与JAVA实现
DES - 对称加密算法简要介绍与JAVA实现
53 2
|
10月前
|
算法 安全 Java
【算法】Java实现DES算法
DES(Data Encryption Standard)是一种对称密钥加密算法,它是在1977年被美国国家标准局(NBS,现在的NIST)发布的。
210 0
|
7月前
|
算法 Java 关系型数据库
JSP基于DES算法管理系统myeclipse开发mysql数据库web结构java编程jsp展现
JSP 基于DES算法管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,mysql数据库存储,系统主要采用B/S模式开发。
42 0
|
11月前
|
算法 Java
java的DES和3DES加解密算法
java的DES和3DES加解密算法
|
11月前
|
算法 Java
java 版DES和MAC算法
java 版DES和MAC算法
|
12月前
|
算法 Java 数据安全/隐私保护
最新版-Python和Java实现Aes相互加解密
最新版-Python和Java实现Aes相互加解密
196 0
|
编解码 前端开发 算法
前端CryptoJS和Java后端数据互相加解密(AES)
最近刚好在做一个简单的保险代理人运营平台,主要是为了方便个人展业,由于有些客户数据比较敏感,所以在用户登录时准备对登录密码进行一波加密后再传输。
前端CryptoJS和Java后端数据互相加解密(AES)
|
存储 移动开发 前端开发
前后端RSA互相加解密、加签验签、密钥对生成(Java)
最近有一些安全性要求比较高的场景,我们提供API给第三方商户用于收单,其中有几个功能是绑卡、ATM/POS密码变更。
前后端RSA互相加解密、加签验签、密钥对生成(Java)