Rumah >pembangunan bahagian belakang >tutorial php >Pembangunan Backend Java: Sambungan API Crypto dengan Java Bouncy Castle

Pembangunan Backend Java: Sambungan API Crypto dengan Java Bouncy Castle

王林
王林asal
2023-06-17 08:41:282091semak imbas

Sejak populariti Internet, teknologi penyulitan telah memainkan peranan penting dalam keselamatan maklumat. Penyulitan API telah menjadi salah satu cara terbaik untuk melindungi keselamatan API. Malah, penyulitan API telah menjadi keperluan keselamatan bagi banyak syarikat Internet hari ini. Java Bouncy Castle, sebagai salah satu perpustakaan penyulitan Java, boleh membantu kami melaksanakan penyulitan dan sambungan API.

Pertama, kita perlu memahami apa itu Java Bouncy Castle. Bouncy Castle ialah perpustakaan penyulitan Java yang menyediakan pelaksanaan banyak algoritma dan protokol penyulitan, seperti AES, RSA, ECDSA, PGP, TLS, dll. Selain itu, ia juga menyokong beberapa keperluan penyulitan profesional, seperti SM2, SM3, SM4 dan algoritma penyulitan kebangsaan China yang lain. Keselamatan Istana Bouncy telah diiktiraf secara meluas, dan ia telah digunakan secara meluas bukan sahaja dalam bidang Java, tetapi juga dalam bahasa pengaturcaraan lain.

Kami boleh menambahkan Istana Bouncy pada projek Java kami melalui Maven atau Gradle. Berikut ialah contoh merujuk Bouncy Castle melalui Maven:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.56</version>
</dependency>

Seterusnya, mari lihat cara menggunakan Java Bouncy Castle untuk sambungan penyulitan API. Berikut ialah contoh penggunaan Bouncy Castle untuk melaksanakan penyulitan AES:

import org.bouncycastle.jce.provider.BouncyCastleProvider;

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

public class AesEncryptionUtil {

    private static final String ALGORITHM = "AES";
    private static final String CIPHER_MODE_FACTORY = "AES/CBC/PKCS7Padding";
    private static final String CHARSET = "UTF-8";

    /**
     * 加密
     *
     * @param data 待加密的字符串
     * @param key  密钥
     * @param iv   初始向量
     * @return 加密后的字符串
     */
    public static String encrypt(String data, String key, String iv) {
        Security.addProvider(new BouncyCastleProvider());
        try {
            byte[] dataBytes = data.getBytes(CHARSET);
            byte[] keyBytes = key.getBytes(CHARSET);
            byte[] ivBytes = iv.getBytes(CHARSET);

            Key secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);

            Cipher cipher = Cipher.getInstance(CIPHER_MODE_FACTORY, "BC");
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);

            byte[] encryptedBytes = cipher.doFinal(dataBytes);

            return Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            throw new RuntimeException("加密失败", e);
        }
    }

    /**
     * 解密
     *
     * @param data 加密后的字符串
     * @param key  密钥
     * @param iv   初始向量
     * @return 解密后的字符串
     */
    public static String decrypt(String data, String key, String iv) {
        Security.addProvider(new BouncyCastleProvider());
        try {
            byte[] dataBytes = Base64.getDecoder().decode(data);
            byte[] keyBytes = key.getBytes(CHARSET);
            byte[] ivBytes = iv.getBytes(CHARSET);

            Key secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);

            Cipher cipher = Cipher.getInstance(CIPHER_MODE_FACTORY, "BC");
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);

            byte[] decryptedBytes = cipher.doFinal(dataBytes);

            return new String(decryptedBytes, StandardCharsets.UTF_8);
        } catch (Exception e) {
            throw new RuntimeException("解密失败", e);
        }
    }

}

Kami menggunakan algoritma penyulitan AES yang disediakan oleh Bouncy Castle, menyatakan vektor awal dan kaedah pelapik semasa penyulitan dan penyahsulitan, serta dikodkan dan dinyahkod melalui Base64 . Apabila menggunakan kaedah ini untuk melaksanakan penyulitan API, perhatian harus diberikan kepada penghantaran kunci dan vektor awal yang selamat untuk mengelak daripada dipintas dan dicuri oleh penyerang.

Pustaka Istana Bouncy boleh membantu kami mencapai penyulitan API yang lebih selamat dan kami boleh melaksanakan algoritma penyulitan yang lebih kompleks berdasarkan Istana Bouncy. Melalui contoh di atas, kita boleh memahami dengan jelas cara menggunakan Java Bouncy Castle untuk sambungan penyulitan API.

Atas ialah kandungan terperinci Pembangunan Backend Java: Sambungan API Crypto dengan Java Bouncy Castle. 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