Maison  >  Article  >  Java  >  Méthode et mise en œuvre de cryptage de données basées sur Java

Méthode et mise en œuvre de cryptage de données basées sur Java

WBOY
WBOYoriginal
2023-06-18 21:22:131532parcourir

Avec le développement des technologies de l'information, les gens accordent de plus en plus d'attention à la sécurité du cryptage des données. Le cryptage des données est un moyen important pour garantir la sécurité des données. Au cours du processus de cryptage des données, les applications doivent utiliser un algorithme de cryptage pour garantir que les données sensibles ne sont pas illégalement volées, falsifiées ou divulguées pendant la transmission et le stockage. Cet article présentera une méthode et une mise en œuvre de cryptage des données basées sur Java pour garantir la sécurité des données.

Qu'est-ce qu'un algorithme de chiffrement ?

L'algorithme de cryptage est un processus qui utilise une méthode spécifique pour calculer le texte chiffré à partir des données. Le texte chiffré est une forme de données incompréhensible qui ne peut être reconvertie en données originales qu'à l'aide d'un algorithme de décryptage utilisant une clé spécifique. L'algorithme de chiffrement est un processus de conversion de texte brut en texte chiffré. Le texte chiffré ne peut être converti en texte brut qu'avec une clé spécifique.

Classe d'outils de chiffrement de Java

Java fournit de nombreux algorithmes de chiffrement et de hachage standard, tels que AES, DES, MD5, SHA, HMAC, etc. Ces algorithmes sont accessibles en Java via le package Java.security. De nombreuses classes d'outils de chiffrement sont fournies en Java, telles que les classes Cipher, MessageDigest et Mac. Ci-dessous, nous expliquerons comment utiliser ces classes d'outils.

  1. Classe Cipher

Cipher est une classe en Java utilisée pour le cryptage et le déchiffrement. Le chiffrement et le déchiffrement nécessitent l'utilisation du même objet Cipher. Si l'objet Cipher est initialisé en mode de chiffrement, il ne peut être utilisé que pour le chiffrement. De même, si l'objet Cipher est initialisé en mode de déchiffrement, il ne peut être utilisé que pour le chiffrement. pour le décryptage.

// 加密示例
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class DESUtil {
    private static final String DEFAULT_ENCODING = "utf-8";
    private static final String ALGORITHM = "DES";

    public static byte[] encrypt(String data, String key) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(DEFAULT_ENCODING));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        return cipher.doFinal(data.getBytes(DEFAULT_ENCODING));
    }

    public static String decrypt(byte[] data, String key) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(DEFAULT_ENCODING));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        return new String(cipher.doFinal(data), DEFAULT_ENCODING);
    }
}
  1. Classe MessageDigest

MessageDigest est une classe en Java utilisée pour calculer les valeurs de hachage. Il prend en charge plusieurs algorithmes de hachage tels que MD5, SHA-1, SHA-256, etc. Les étapes de base pour calculer la valeur de hachage à l'aide de la classe MessageDigest sont les suivantes :

import java.security.MessageDigest;

public class DigestUtil {
    private static final String DEFAULT_ENCODING = "utf-8";

    public static String md5(String data) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(data.getBytes(DEFAULT_ENCODING));
        byte[] digest = md.digest();

        return HexUtil.toHexString(digest);
    }

    public static String sha1(String data) throws Exception {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        md.update(data.getBytes(DEFAULT_ENCODING));
        byte[] digest = md.digest();

        return HexUtil.toHexString(digest);
    }

    public static String sha256(String data) throws Exception {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(data.getBytes(DEFAULT_ENCODING));
        byte[] digest = md.digest();

        return HexUtil.toHexString(digest);
    }
}
  1. Classe Mac

La classe Mac est une classe utilisée pour calculer le code de vérification du message. Il prend en charge HmacMD5, HmacSHA1 et d'autres algorithmes. Les étapes de base pour utiliser la classe Mac pour calculer les codes de vérification des messages sont les suivantes :

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class HmacUtil {
    private static final String DEFAULT_ENCODING = "utf-8";
    private static final String ALGORITHM = "HmacSHA256";

    public static String hmac(String data, String key) throws Exception {
        byte[] keyBytes = key.getBytes(DEFAULT_ENCODING);
        SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM);
        Mac mac = Mac.getInstance(ALGORITHM);
        mac.init(secretKeySpec);

        byte[] dataBytes = data.getBytes(DEFAULT_ENCODING);
        byte[] digest = mac.doFinal(dataBytes);

        return HexUtil.toHexString(digest);
    }
}

Processus de cryptage des données

Le processus de cryptage des données peut être divisé en trois étapes de base : génération de clé, cryptage et déchiffrement. Ci-dessous, nous présenterons le processus détaillé de ces trois étapes.

  1. Génération de clés

La génération de clés est la première étape du cryptage des données. Nous pouvons générer des types de clés pris en charge à l'aide de la classe KeyGenerator fournie par Java. Par exemple, l'exemple de code que nous pouvons générer une clé de cryptage AES est le suivant :

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom;

public class KeyUtil {
    private static final String ALGORITHM = "AES";

    public static SecretKey generateAESKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
        SecureRandom secureRandom = new SecureRandom();
        keyGenerator.init(256, secureRandom); // 256是AES密钥长度

        return keyGenerator.generateKey();
    }
}
  1. Encryption

Le cryptage est la deuxième étape du cryptage des données. Nous pouvons utiliser la classe Cipher pour le cryptage des données. Avant le cryptage, nous devons obtenir la clé de cryptage et déterminer l'algorithme de cryptage et le mode de cryptage.

public class AESEncryptUtil {
    private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
    private static final String DEFAULT_ENCODING = "utf-8";

    public static byte[] encrypt(String data, SecretKey key) throws Exception {
        IvParameterSpec iv = generateIV();

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, key, iv);

        byte[] encryptedData = cipher.doFinal(data.getBytes(DEFAULT_ENCODING));

        return encryptedData;
    }

    private static IvParameterSpec generateIV() {
        byte[] ivBytes = new byte[16];
        SecureRandom random = new SecureRandom();
        random.nextBytes(ivBytes);
        return new IvParameterSpec(ivBytes);
    }
}
  1. Décryptage

Le décryptage est la troisième étape du cryptage des données. Nous pouvons utiliser la classe Cipher pour le décryptage des données. Avant le décryptage, nous devons obtenir la clé de décryptage et déterminer l'algorithme de cryptage et le mode de cryptage.

public class AESDecryptUtil {
    private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
    private static final String DEFAULT_ENCODING = "utf-8";

    public static String decrypt(byte[] encryptedData, SecretKey key, IvParameterSpec iv) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, key, iv);

        byte[] decryptedData = cipher.doFinal(encryptedData);

        return new String(decryptedData, DEFAULT_ENCODING);
    }
}

Résumé

Cet article présente principalement la méthode et la mise en œuvre de cryptage des données basées sur Java. Tout d'abord, il présente le concept d'algorithmes de chiffrement et certains algorithmes de chiffrement et de hachage fournis en Java, puis explique l'utilisation des classes d'outils de chiffrement fournies en Java, notamment les classes Cipher, MessageDigest et Mac. Enfin, nous présentons le processus de chiffrement des données, comprenant trois étapes : génération de clé, chiffrement et déchiffrement. Grâce à l'introduction de cet article, les lecteurs peuvent avoir une compréhension approfondie des principes et des méthodes de mise en œuvre du cryptage des données, qui constituent une base pour garantir la sécurité des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn