Rumah  >  Artikel  >  Java  >  Kaedah dan pelaksanaan penyulitan data berasaskan Java

Kaedah dan pelaksanaan penyulitan data berasaskan Java

WBOY
WBOYasal
2023-06-18 21:22:131589semak imbas

Dengan perkembangan teknologi maklumat, orang ramai memberi lebih perhatian kepada keselamatan penyulitan data. Penyulitan data adalah cara penting untuk memastikan keselamatan data. Semasa proses penyulitan data, aplikasi perlu menggunakan algoritma penyulitan untuk memastikan data sensitif tidak dicuri secara haram, diusik atau bocor semasa penghantaran dan penyimpanan. Artikel ini akan memperkenalkan kaedah penyulitan data berasaskan Java dan pelaksanaan untuk menyediakan jaminan untuk keselamatan data.

Apakah algoritma penyulitan?

Algoritma penyulitan ialah proses yang menggunakan kaedah khusus untuk mengira teks sifir daripada data. Ciphertext ialah bentuk data yang tidak dapat difahami yang hanya boleh ditukar kembali kepada data asal menggunakan algoritma penyahsulitan menggunakan kunci tertentu. Algoritma penyulitan ialah proses yang menukar teks biasa kepada teks sifir hanya boleh ditukar kepada teks biasa dengan kunci tertentu.

Kelas alat penyulitan Java

Java menyediakan banyak algoritma penyulitan dan pencincang standard, seperti AES, DES, MD5, SHA, HMAC, dsb. Algoritma ini boleh diakses di Java melalui pakej Java.security. Banyak kelas alat penyulitan disediakan dalam Java, seperti kelas Cipher, MessageDigest dan Mac. Di bawah ini kami akan memperkenalkan cara menggunakan kelas alat ini.

  1. Kelas sifir

Sifir ialah kelas yang digunakan untuk penyulitan dan penyahsulitan dalam Java. Kedua-dua penyulitan dan penyahsulitan memerlukan penggunaan objek Cipher yang sama Jika objek Cipher dimulakan dalam mod penyulitan, maka ia hanya boleh digunakan untuk penyulitan yang sama, jika objek Cipher dimulakan dalam mod penyahsulitan, maka ia hanya boleh digunakan untuk penyahsulitan.

// 加密示例
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. Kelas MessageDigest

MessageDigest ialah kelas dalam Java yang digunakan untuk mengira nilai cincang. Ia menyokong berbilang algoritma pencincangan seperti MD5, SHA-1, SHA-256, dll. Langkah asas untuk mengira nilai hash ​​menggunakan kelas MessageDigest adalah seperti berikut:

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. Kelas Mac

Kelas Mac ialah kelas yang digunakan untuk mengira kod pengesahan mesej . Ia menyokong HmacMD5, HmacSHA1 dan algoritma lain. Langkah asas menggunakan kelas Mac untuk mengira kod pengesahan mesej adalah seperti berikut:

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

Proses penyulitan data

Proses penyulitan data boleh dibahagikan kepada tiga langkah asas: penjanaan kunci, penyulitan dan penyahsulitan. Di bawah ini kami akan memperkenalkan proses terperinci ketiga-tiga langkah ini.

  1. Penjanaan kunci

Penjanaan kunci ialah langkah pertama dalam penyulitan data. Kita boleh menggunakan kelas KeyGenerator yang disediakan oleh Java untuk menjana jenis kunci yang disokong. Sebagai contoh, kita boleh menjana kunci penyulitan AES dengan kod sampel berikut:

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. Penyulitan

Penyulitan ialah langkah kedua penyulitan data. Kita boleh menggunakan kelas Cipher untuk penyulitan data. Sebelum penyulitan, kita perlu mendapatkan kunci penyulitan dan menentukan algoritma penyulitan dan mod penyulitan.

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. Penyahsulitan

Penyahsulitan ialah langkah ketiga penyulitan data. Kita boleh menggunakan kelas Cipher untuk penyahsulitan data. Sebelum penyahsulitan, kita perlu mendapatkan kunci penyahsulitan dan menentukan algoritma penyulitan dan mod penyulitan.

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

Ringkasan

Artikel ini terutamanya memperkenalkan kaedah dan pelaksanaan penyulitan data berasaskan Java. Pertama, ia memperkenalkan konsep algoritma penyulitan dan beberapa algoritma penyulitan dan cincang yang disediakan dalam Java, dan kemudian menerangkan penggunaan kelas alat penyulitan yang disediakan di Java, termasuk kelas Cipher, MessageDigest dan Mac. Akhir sekali, kami memperkenalkan proses penyulitan data, termasuk tiga langkah: penjanaan kunci, penyulitan dan penyahsulitan. Melalui pengenalan artikel ini, pembaca boleh mempunyai pemahaman yang mendalam tentang prinsip dan kaedah pelaksanaan penyulitan data, yang menyediakan asas untuk memastikan keselamatan data.

Atas ialah kandungan terperinci Kaedah dan pelaksanaan penyulitan data berasaskan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn