Java で RSA を使用して非対称暗号化を実装する方法の例

黄舟
リリース: 2017-08-07 10:34:28
オリジナル
1636 人が閲覧しました

この記事では、主に Java での RSA を使用した非対称暗号化の例に関する関連情報を紹介します。この部分の知識を理解するのに役立つ例がここに提供されています。必要な方は、

Java での RSA を使用した非対称暗号化の例を参照してください。

RSA は一般に次のように理解されています:

あなたはただ考える必要があります: これは暗号化であるため、自分のメッセージを他の人に知られたくないので、自分だけがそれを復号化できるため、公開鍵は次のように結論付けることができます。暗号化を担当し、秘密キーを復号化します。同様に、これは署名なので、誰にも私になりすましてメッセージを送信してほしくありません。そのため、この署名を公開できるのは私だけであると結論付けることができます。秘密キーは署名を担当し、公開キーは検証を担当します。

実装コード:

package com.sahadev; 
 
import java.security.KeyFactory; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.interfaces.RSAPrivateKey; 
import java.security.interfaces.RSAPublicKey; 
import java.security.spec.PKCS8EncodedKeySpec; 
import java.security.spec.X509EncodedKeySpec; 

import javax.crypto.Cipher; 
import org.apache.commons.codec.binary.Base64; 

public class RSA { 
public static void main(String[] args) { 
    JDKRSA(); 
  } 
 
  public static void JDKRSA() { 
    try { 
      // 构建密钥对儿 
      KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 
      keyPairGenerator.initialize(512); 
      KeyPair keyPair = keyPairGenerator.generateKeyPair(); 
      RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); 
      RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); 
      System.out.println("Public Key : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded())); 
      System.out.println("Private Key : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPrivateKey.getEncoded())); 
 
      // 2.私钥加密,公钥解密---加密 
      PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); 
      KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
      PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); 
      Cipher cipher = Cipher.getInstance("RSA"); 
      cipher.init(Cipher.ENCRYPT_MODE, privateKey); 
      byte[] result = cipher.doFinal(DH.src.getBytes()); 
      System.out.println("私钥加密,公钥解密------加密 : " + Base64.encodeBase64String(result)); 
 
      // 3.私钥加密,公钥解密---解密 
      X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded()); 
      keyFactory = KeyFactory.getInstance("RSA"); 
      PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); 
      cipher = Cipher.getInstance("RSA"); 
      cipher.init(Cipher.DECRYPT_MODE, publicKey); 
      result = cipher.doFinal(result); 
      System.out.println("私钥加密,公钥解密------解密 : " + new String(result)); 
 
      // 4.公钥加密,私钥解密---加密 
      x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded()); 
      keyFactory = KeyFactory.getInstance("RSA"); 
      publicKey = keyFactory.generatePublic(x509EncodedKeySpec); 
      cipher = Cipher.getInstance("RSA"); 
      cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
      result = cipher.doFinal(DH.src.getBytes()); 
 
      System.out.println("公钥加密,私钥解密------加密 : " + Base64.encodeBase64String(result)); 
 
      // 5.公钥加密,私钥解密---解密 
      pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); 
      keyFactory = KeyFactory.getInstance("RSA"); 
      privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); 
      cipher = Cipher.getInstance("RSA"); 
      cipher.init(Cipher.DECRYPT_MODE, privateKey); 
      result = cipher.doFinal(result); 
      System.out.println("公钥加密,私钥解密------解密 : " + new String(result)); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
}
ログイン後にコピー

出力結果を添付します:


Public Key : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcFshoP5xm94r2aTbe++aMZMzJtXHxDpqmMQ9aL1cEthr2Xtac+Eckv32Kzb4R8C/6vObNBfd8sWx9FU5N2y6cCAwEAAQ== 
Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwWyGg/nGb3ivZpNt775oxkzMm1cfEOmqYxD1ovVwS2GvZe1pz4RyS/fYrNvhHwL/q85s0F93yxbH0VTk3bLpwIDAQABAkBdAA7rabug6IRGykztyFcmjxAuD5aSl358jnoAFuCtMo4skfxh1vR4ENFUE0Lt0zJ3CKVH0o9UQDNG0r4jeOGRAiEA3KuXps9OG0AXuxLggg0e7B1Os5C3gNrH2fMqAPjtpY0CIQCvM4EPfdrjjNQiM0ATVBT5jZnw3PRu33pdyISWuoMHAwIgDOLMSUZjxj2Y5Si2CYIgoyMW/G9f99tOvlBvzHy8y+UCIF94MVu/uQdGNlJsmv3tU4CpKLmXrZq9LHDuU1HPUJcBAiEAy/0OS2Q9EBfmPwhsGXF4WMxj4wG0xzNFWxSeZB0qxzk= 
私钥加密,公钥解密------加密 : NXF87irBEmK3x/fW7IWY4GuA8AP4Rvj4DJSp2Cjjsoo5X/ScHHKdvYtlM+9TOUAvMeuKWk5WH70g53q7+E73zg== 
私钥加密,公钥解密------解密 : Hello,sahadev! 
公钥加密,私钥解密------加密 : hjL8928jCbNtVCRhKaYAxQNJmiIAktBskhff2I01pbaHtfGH6GJTcP1i345/3I9OzwoVFxvi/oXgVJsIsg7MOQ== 
公钥加密,私钥解密------解密 : Hello,sahadev!
ログイン後にコピー

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!