ホームページ  >  記事  >  Java  >  Javaベースのデータ暗号化方式と実装

Javaベースのデータ暗号化方式と実装

WBOY
WBOYオリジナル
2023-06-18 21:22:131591ブラウズ

情報技術の発展に伴い、人々はデータ暗号化のセキュリティにますます注目を集めています。データ暗号化は、データのセキュリティを確保するための重要な手段です。データ暗号化プロセス中、アプリケーションは暗号化アルゴリズムを使用して、送信中および保存中に機密データが違法に盗まれたり、改ざんされたり、漏洩されたりしないようにする必要があります。この記事では、データのセキュリティを保証するための Java ベースのデータ暗号化方法と実装を紹介します。

暗号化アルゴリズムとは何ですか?

暗号化アルゴリズムは、特定の方法を使用してデータから暗号文を計算するプロセスです。暗号文は、特定のキーを使用した復号化アルゴリズムを使用してのみ元のデータに変換できる、理解できない形式のデータです。暗号化アルゴリズムは平文を暗号文に変換するプロセスであり、暗号文は特定のキーでのみ平文に変換できます。

Java の暗号化ツール クラス

Java は、AES、DES、MD5、SHA、HMAC など、多くの標準暗号化およびハッシュ アルゴリズムを提供します。これらのアルゴリズムには、Java.security パッケージを介して Java でアクセスできます。 Cipher、MessageDigest、Mac クラスなど、多くの暗号化ツール クラスが Java で提供されています。以下では、これらのツールクラスの使用方法を紹介します。

  1. Cipher クラス

Cipher は、Java の暗号化と復号化に使用されるクラスです。暗号化と復号化の両方で、同じ Cipher オブジェクトを使用する必要があります。Cipher オブジェクトが暗号化モードで初期化されている場合は、暗号化のみに使用できます。同様に、Cipher オブジェクトが復号化モードで初期化されている場合は、暗号化のみに使用できます。復号化のため。

// 加密示例
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. MessageDigest クラス

MessageDigest は、ハッシュ値を計算するために使用される Java のクラスです。 MD5、SHA-1、SHA-256 などの複数のハッシュ アルゴリズムをサポートします。 MessageDigest クラスを使用してハッシュ値を計算する基本的な手順は次のとおりです。

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. Mac クラス

Mac クラスは、メッセージ検証コードを計算するために使用されるクラスです。 。 HmacMD5、HmacSHA1、その他のアルゴリズムをサポートします。 Mac クラスを使用してメッセージ検証コードを計算する基本的な手順は次のとおりです。

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);
    }
}

データ暗号化プロセス

データ暗号化プロセスは、キーの生成、暗号化という 3 つの基本的な手順に分けることができます。そして復号化。以下に、これら 3 つのステップの詳細なプロセスを紹介します。

  1. キー生成

キー生成はデータ暗号化の最初のステップです。 Java が提供する KeyGenerator クラスを使用して、サポートされているキー タイプを生成できます。たとえば、AES 暗号化キーを生成できるサンプル コードは次のとおりです。

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

暗号化はデータ暗号化の 2 番目のステップです。データ暗号化には Cipher クラスを使用できます。暗号化する前に、暗号化キーを取得し、暗号化アルゴリズムと暗号化モードを決定する必要があります。

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. 復号化

復号化は、データ暗号化の 3 番目のステップです。データの復号化には Cipher クラスを使用できます。復号化する前に、復号化キーを取得し、暗号化アルゴリズムと暗号化モードを決定する必要があります。

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);
    }
}

概要

この記事では、主に Java ベースのデータ暗号化の方法とその実装について紹介します。まず、暗号化アルゴリズムの概念と、Java で提供されるいくつかの暗号化およびハッシュ アルゴリズムを紹介し、次に、Cipher、MessageDigest、Mac クラスなど、Java で提供される暗号化ツール クラスの使用法を説明します。最後に、キーの生成、暗号化、復号化の 3 つのステップを含むデータ暗号化プロセスを紹介します。この記事の紹介を通じて、読者はデータのセキュリティを確保するための基盤となるデータ暗号化の原理と実装方法を深く理解することができます。

以上がJavaベースのデータ暗号化方式と実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。