Javaは、RSA非対称暗号化アルゴリズムのデータフローを使用しています

詳細な手順のコードのコメントを参照してください。

 

輸入java.security.KeyFactory。
輸入java.security.KeyPair。
輸入java.security.KeyPairGenerator。
輸入java.security.PrivateKey;
輸入java.security.PublicKey。
輸入java.security.spec.PKCS8EncodedKeySpec;
輸入java.security.spec.X509EncodedKeySpec; 

輸入javax.crypto.Cipher; 

輸入org.apache.commons.codec.binary.Base64。


パブリック クラスResUtils { 
  
    公共 静的 ボイドメイン(文字列[]引数)がスロー例外{ 
    
        / *  
         *非对称加密说明
         * 
         *一般的に公開鍵は、秘密鍵がプライベートであります
         *データは、公開鍵が唯一の秘密鍵データを復号化することができます使用して暗号化
         *データは秘密鍵を使って暗号化された唯一の公共データを復号化することができます
         *      
         * / 
        KeyPairGeneratorのkeygenの = KeyPairGenerator.getInstance(「RSA」);       // するKeyPairGeneratorオブジェクトを生成します非対称公開鍵と秘密鍵暗号、RSA非対称暗号化アルゴリズムの選択 
        keyGen.initialize(2048);                                             // キーは、2048初期化 
        キーペアキーペアkeyGen.generateKeyPair =();                          // キーのペアを生成する 
        のPublicKey公開鍵ペア= .getPublicは();                           // オブジェクトの公開鍵を取得する 
        のPrivateKeyのPrivateKey keyPair.getPrivate =();                        //入手した秘密鍵オブジェクトの
        pubkeyでBase64.encodeBase64String =文字列(publicKey.getEncoded());   // 公開鍵エンコードされた文字列を取得する 
        文字列prikey = Base64.encodeBase64String(privateKey.getEncodedを()); // エンコードされた秘密キー文字列
        のSystem.out。 println(pubkeyで); 
        System.out.printlnは(prikey); 
        
        
        
        
        // 公開鍵文字列オブジェクトへの公開鍵の削減
        
        バイト [] = pubKeyb Base64.decodeBase64(pubkeyで);                         // エンコードさキーの文字列 
        X509EncodedKeySpec x509KeySpec = 新しい新しい X509EncodedKeySpec (pubKeyb);     //は、公開鍵エンコードされた文字列に基づいて公開鍵マテリアルを作成しますか?
        KeyFactoryに= KeyFactory.getInstanceするKeyFactory( "RSA");                // RSAアルゴリズムの植物を使用してキー
        PubKeyr = keyFactory.generatePublicのPublicKey(x509KeySpec);           // キー材料公開鍵ファクトリオブジェクトを使用して公開鍵を生成する
        
        // プライベートキーオブジェクトプライベート文字列復元
        
        バイト [] = priKeyb Base64.decodeBase64(prikeyを);                         // 符号化プライベート文字列の 
        あるPKCS8EncodedKeySpec pkcs8KeySpec = 新しい新しいあるPKCS8EncodedKeySpec(priKeyb); //を秘密鍵エンコードされた文字列に合わせてプライベートキーマテリアルを作成しますか?
        PriKeyr = keyFactory.generatePrivateのPrivateKey(pkcs8KeySpec);        // プライベート鍵オブジェクトを生成した秘密鍵を使用してキー植物材料
        
        
        
        
        // (公開鍵暗号を使用してオブジェクト)、暗号化されたデータを
        
        文字列データ =「データのデータ」;                                            // データを暗号化します
        Cipher.getInstance暗号=暗号化(「RSA」);                             // データオブジェクトを暗号化または復号化するための暗号、RSAアルゴリズムは、暗号化または復号化するために選択された 
        cipher.init(Cipher.ENCRYPT_MODE、pubKeyrを);                             // 暗号の暗号化モードENCRYPT_MODEが選択されたオブジェクト、および公開鍵暗号化対象使用
        バイト [] = encData Cipher.doFinal(data.getBytes( "UTF8"));                // 暗号オブジェクトは、暗号化データ生成 
        列= encda​​tas Base64.encodeBase64String(encDataを);                  // 取得した暗号化されたデータ列をコード
        System.out.println(encda​​tas); 
        
        //は、データを復号化(オブジェクトを解読するための秘密鍵を使用して)
        
        cipher.init(Cipher.PRIVATE_KEY、priKeyr);                              // 暗号PRIVATE_KEY復号モードは、オブジェクトを選択し、解読するための秘密鍵を使用してオブジェクト
        のバイトを[] = Cipher.doFinal DecData(Base64.decodeBase64(encda​​tas));        // 暗号化されたデータと復号化されたデータをデコードする 
        文字列を= decdatas 新しい新しい文字列(DecData、 "UTF8を");                         // 文字列の復号化されたデータ取得
        のSystem.outを。 println(decdatas); 
  } 
}

 

(終わり)

 

おすすめ

転載: www.cnblogs.com/20170719log/p/11356872.html