Rumah  >  Artikel  >  Java  >  Penyulitan data perkhidmatan mikro dan fungsi penyahsulitan yang ditulis dalam Java

Penyulitan data perkhidmatan mikro dan fungsi penyahsulitan yang ditulis dalam Java

王林
王林asal
2023-08-08 09:37:451545semak imbas

Penyulitan data perkhidmatan mikro dan fungsi penyahsulitan yang ditulis dalam Java

Fungsi penyulitan dan penyahsulitan data perkhidmatan mikro yang ditulis dalam Java

Dalam era Internet hari ini, dengan populariti penghantaran data dan peningkatan risiko kebocoran maklumat sensitif, keselamatan data menjadi semakin penting. Peningkatan seni bina perkhidmatan mikro menyediakan penyelesaian yang lebih fleksibel dan berskala untuk penyulitan dan penyahsulitan data. Artikel ini akan memperkenalkan cara menggunakan Java untuk menulis fungsi penyulitan dan penyahsulitan data perkhidmatan mikro yang ringkas tetapi berkuasa, dan memberikan contoh kod yang sepadan.

Pertama, kita perlu memilih algoritma penyulitan yang boleh dipercayai. Di sini, kami memilih untuk menggunakan algoritma AES (Advanced Encryption Standard), yang merupakan algoritma penyulitan simetri yang sangat popular dan selamat serta boleh dipercayai. Algoritma AES menyokong panjang kunci 128-bit, 192-bit dan 256-bit Kita boleh memilih panjang kunci yang berbeza mengikut keperluan sebenar. Selain itu, kita juga perlu memilih mod pelapik dan mod penyulitan yang sesuai. Di sini, kami memilih untuk menggunakan mod pelapik PKCS5Padding dan mod penyulitan CBC.

Seterusnya, kami menggunakan perpustakaan kriptografi Java untuk melaksanakan operasi penyulitan dan penyahsulitan. Pertama, kita perlu menjana kunci dan menyimpannya di tempat yang selamat. Di sini kami menggunakan kelas KeyGenerator yang disediakan oleh Java untuk menjana kunci.

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class EncryptionUtils {
    public static SecretKey generateKey() throws NoSuchAlgorithmException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);
        return keyGenerator.generateKey();
    }
}

Selepas menjana kunci, kami boleh menggunakan kunci untuk melaksanakan operasi penyulitan dan penyahsulitan. Di bawah ialah contoh kod yang menggunakan kunci untuk menyulitkan data.

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.Base64;

public class EncryptionUtils {
    public static String encryptData(String data, SecretKey secretKey, String initVector) throws GeneralSecurityException {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(initVector.getBytes(StandardCharsets.UTF_8)));
        byte[] encryptedData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedData);
    }
}

Dalam kod di atas, kami menggunakan pengekodan Base64 untuk menukar data yang disulitkan untuk memudahkan penghantaran dan penyimpanan pada rangkaian. Seterusnya, kami memberikan contoh kod untuk menyahsulit data menggunakan kunci.

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.Base64;

public class EncryptionUtils {
    public static String decryptData(String encryptedData, SecretKey secretKey, String initVector) throws GeneralSecurityException {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(initVector.getBytes(StandardCharsets.UTF_8)));
        byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedData, StandardCharsets.UTF_8);
    }
}

Dalam kod di atas, kami menggunakan penyahkodan Base64 untuk memulihkan data yang disulitkan.

Akhir sekali, kami boleh merangkumkan fungsi penyulitan dan penyahsulitan di atas ke dalam API perkhidmatan mikro untuk memudahkan panggilan sistem lain. Di bawah ialah kod contoh perkhidmatan mikro yang mudah.

import org.springframework.web.bind.annotation.*;

import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/encryption")
public class EncryptionController {
    private SecretKey secretKey;

    public EncryptionController() throws NoSuchAlgorithmException {
        this.secretKey = EncryptionUtils.generateKey();
    }

    @PostMapping("/encrypt")
    public Map<String, String> encryptData(@RequestBody Map<String, String> data) throws GeneralSecurityException {
        String encryptedData = EncryptionUtils.encryptData(data.get("data"), secretKey, data.get("initVector"));
        Map<String, String> result = new HashMap<>();
        result.put("encryptedData", encryptedData);
        return result;
    }

    @PostMapping("/decrypt")
    public Map<String, String> decryptData(@RequestBody Map<String, String> data) throws GeneralSecurityException {
        String decryptedData = EncryptionUtils.decryptData(data.get("encryptedData"), secretKey, data.get("initVector"));
        Map<String, String> result = new HashMap<>();
        result.put("decryptedData", decryptedData);
        return result;
    }
}

Dalam kod di atas, kami menggunakan rangka kerja Spring untuk melaksanakan antara muka HTTP yang mudah, di mana /encryption/encrypt接口用于加密数据,/encryption/decryptantara muka digunakan untuk menyahsulit data. Parameter permintaan menggunakan format JSON dan hasil yang disulitkan atau dinyahsulit dikembalikan.

Ringkasnya, kami menulis fungsi penyulitan dan penyahsulitan data perkhidmatan mikro yang ringkas tetapi berkuasa menggunakan Java. Gunakan algoritma AES untuk menyulitkan dan menyahsulit data, dan merangkumnya ke dalam API perkhidmatan mikro yang boleh dipanggil oleh sistem lain. Ini boleh memastikan keselamatan data semasa penghantaran dan penyimpanan serta meningkatkan keselamatan keseluruhan sistem.

Atas ialah kandungan terperinci Penyulitan data perkhidmatan mikro dan fungsi penyahsulitan yang ditulis dalam 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