ホームページ >Java >&#&チュートリアル >Javaを使用してRSA暗号化アルゴリズムを実装する方法

Javaを使用してRSA暗号化アルゴリズムを実装する方法

PHPz
PHPzオリジナル
2023-09-20 14:33:351541ブラウズ

Javaを使用してRSA暗号化アルゴリズムを実装する方法

Java を使用して RSA 暗号化アルゴリズムを実装する方法

RSA (Rivest-Shamir-Adleman) は非対称暗号化アルゴリズムであり、最も一般的に使用される暗号化アルゴリズムの 1 つです。現在のアルゴリズムは 1 つです。この記事では、Java 言語を使用して RSA 暗号化アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。

  1. キー ペアの生成

まず、公開キーと秘密キーで構成される RSA キーのペアを生成する必要があります。公開キーはデータの暗号化に使用でき、秘密キーはデータの復号化に使用できます。以下は、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();
        }
    }
}

上記のコードは、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 メソッドを呼び出して暗号化されたデータを復号化し、復号化されたデータを出力用の文字列に変換します。

概要

この記事では、Java 言語を使用して RSA 暗号化アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。キー ペアを生成し、公開キーを使用してデータを暗号化し、秘密キーを使用してデータを復号化することで、RSA 暗号化アルゴリズムの機能を実装できます。この記事が RSA 暗号化アルゴリズムについて読者に役立つことを願っています。

以上がJavaを使用してRSA暗号化アルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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