recherche
MaisonJavajavaDidacticielComment implémenter l'algorithme de cryptage RSA à l'aide de Java

Comment implémenter l'algorithme de cryptage RSA à l'aide de Java

Sep 20, 2023 pm 02:33 PM
java实现algorithme de cryptage RSAÉtapes de mise en œuvre du chiffrement

Comment implémenter lalgorithme de cryptage RSA à laide de Java

Comment implémenter l'algorithme de cryptage RSA à l'aide de Java

RSA (Rivest-Shamir-Adleman) est un algorithme de cryptage asymétrique, qui est actuellement l'un des algorithmes de cryptage les plus couramment utilisés. Cet article explique comment utiliser le langage Java pour implémenter l'algorithme de chiffrement RSA et fournit des exemples de code spécifiques.

  1. Générer une paire de clés

Tout d'abord, nous devons générer une paire de clés RSA, composée d'une clé publique et d'une clé privée. La clé publique peut être utilisée pour chiffrer des données et la clé privée peut être utilisée pour déchiffrer des données. Voici un exemple de code pour générer une paire de clés RSA :

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;

public class RSAKeyGenerator {
    public static void main(String[] args) {
        try {
            // 创建RSA密钥对生成器
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            // 初始化密钥长度为2048位
            keyPairGenerator.initialize(2048);
            // 生成密钥对
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            // 获取公钥
            String publicKey = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());
            System.out.println("公钥:" + publicKey);
            // 获取私钥
            String privateKey = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded());
            System.out.println("私钥:" + privateKey);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

Le code ci-dessus utilise la classe KeyPairGenerator pour générer une paire de clés RSA et convertit les clés publiques et privées via le Base64<.> classe Convertir en chaîne codée en Base64. <code>KeyPairGenerator类来生成RSA密钥对,并通过Base64类将公钥和私钥转换成Base64编码的字符串。

  1. 使用公钥加密数据

接下来,我们将使用公钥对数据进行加密。以下是使用RSA公钥加密数据的代码示例:

import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;

public class RSAEncryptor {
    public static void main(String[] args) {
        try {
            // 原始数据
            String data = "Hello, world!";
            // 公钥字符串(Base64编码)
            String publicKeyString = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALloSaH+P1Z1Q1A/qs3gejbddklEiROWf2EadwZ68GBgzHk491icoP5x24SBOweiYA+xSqNxxFxSKuWpMu922hMCAwEAAQ==";

            // 将公钥字符串转换为公钥对象
            byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyString);
            PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyBytes));

            // 创建RSA密码器
            Cipher cipher = Cipher.getInstance("RSA");
            // 使用公钥进行加密
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] encryptedData = cipher.doFinal(data.getBytes("UTF-8"));

            // 输出加密后的数据(Base64编码)
            String encryptedDataString = Base64.getEncoder().encodeToString(encryptedData);
            System.out.println("加密后的数据:" + encryptedDataString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码使用Cipher类进行数据加密。首先,将公钥字符串转换为公钥对象。然后,创建RSA密码器并使用公钥进行初始化。最后,调用doFinal方法对数据进行加密,并将加密后的数据转换为Base64编码的字符串输出。

  1. 使用私钥解密数据

最后,我们使用私钥对加密后的数据进行解密。以下是使用RSA私钥解密数据的代码示例:

import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;

public class RSADecryptor {
    public static void main(String[] args) {
        try {
            // 加密后的数据(Base64编码)
            String encryptedDataString = "3TiTv+AE9FF8NMMFYqx8y/Qz+uzFP/JEcsKGMJP+10r7SmNSDRsjMdK5Mbcz8zvrTaWCrIP4wmUgJhD7ZNoSmQ==";
            // 私钥字符串(Base64编码)
            String privateKeyString = "MIIBOAIBAAJALloSaH+P1Z1Q1A/qs3gejbddklEiROWf2EadwZ68GBgzHk491icoP5x24SBOweiYA+xSqNxxFxSKuWpMu922hMCAwEAAQJAB+hKDm+GF1z5soiqn8DBw7SHf/XRGlxpViWOGTm+LJ6NOkOFH0RRg/cdqq9umemQvR+E6YUcM/NzqxIqJFQyQIhAO2dNYXRKeHNmKXa5vYqWYJIJtyKXXDhLvCRukRz4WFAiEAz2jl8eXSaevi8YMnxRwYnH/OgnesWr0AFr0QemF5sECIBzvqdPKUQzzw3CHjgcTJtX9p9q/MVN4upqvtbJ2WxsNAiAYET666mlWgGIca1ePAbtoB10vhWzDY5YxQ/eTkDssCQIgNoDd1BtSVbWDEUSN/9fCP6UekytJfGFeUZerYB0UlL0=";
            
            // 将私钥字符串转换为私钥对象
            byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyString);
            PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));

            // 创建RSA密码器
            Cipher cipher = Cipher.getInstance("RSA");
            // 使用私钥进行解密
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedDataString));

            // 输出解密后的数据
            String decryptedDataString = new String(decryptedData, "UTF-8");
            System.out.println("解密后的数据:" + decryptedDataString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码和加密部分的代码类似,只不过这次是使用私钥对加密后的数据进行解密。同样地,首先将私钥字符串转换为私钥对象。然后,创建RSA密码器并使用私钥进行初始化。最后,调用doFinal

    Crypter les données à l'aide d'une clé publique

    Ensuite, nous chiffrerons les données à l'aide d'une clé publique. Voici un exemple de code qui utilise une clé publique RSA pour chiffrer les données :

    rrreee🎜Le code ci-dessus utilise la classe Cipher pour le chiffrement des données. Tout d’abord, convertissez la chaîne de clé publique en un objet de clé publique. Ensuite, créez le chiffre RSA et initialisez-le avec la clé publique. Enfin, appelez la méthode doFinal pour chiffrer les données et convertissez les données chiffrées en une chaîne codée en Base64 pour la sortie. 🎜
      🎜Utilisez la clé privée pour décrypter les données🎜🎜🎜Enfin, nous utilisons la clé privée pour décrypter les données cryptées. Voici un exemple de code d'utilisation d'une clé privée RSA pour déchiffrer les données : 🎜rrreee🎜Le code ci-dessus est similaire au code de la partie cryptage, sauf que cette fois, la clé privée est utilisée pour déchiffrer les données cryptées. De même, convertissez d’abord la chaîne de clé privée en un objet de clé privée. Ensuite, créez le chiffre RSA et initialisez-le avec la clé privée. Enfin, appelez la méthode doFinal pour déchiffrer les données chiffrées et convertir les données déchiffrées en une chaîne pour la sortie. 🎜🎜Résumé🎜🎜Cet article présente comment implémenter l'algorithme de chiffrement RSA à l'aide du langage Java et fournit des exemples de code spécifiques. En générant une paire de clés, en utilisant la clé publique pour chiffrer les données et en utilisant la clé privée pour déchiffrer les données, nous pouvons implémenter les fonctions de l'algorithme de chiffrement RSA. J'espère que cet article sera utile aux lecteurs sur l'algorithme de cryptage RSA. 🎜

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
Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Mar 17, 2025 pm 05:46 PM

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Mar 17, 2025 pm 05:44 PM

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Mar 17, 2025 pm 05:43 PM

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Mar 17, 2025 pm 05:35 PM

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP