私はPKIを実装しようとしています。私は弾力のある城を使用せずにJavaでRSAを使用して大きな文字列を暗号化したい。問題が発生しています。データは117バイトを超えてはいけません。私は失敗したソリューションのためにセイティングを試みました。私はこの暗号化の初心者です。一例として大きな文字列を与えて説明し、説明してください。RSAを使用してjavaの大きな文字列を暗号化および復号化する
答えて
一度に約128バイトを超えるRSA暗号化復号化を使用することはできません。あなたは、データを分割して、ループの中でバイトをString/Arrayに書き込む必要があります。あなたの唯一の問題がデータのサイズであるならば、おそらくそれ以上のものはありません。ちょうどデータを分割する。あなたは一般的にはRSAの暗号化の詳細な説明が必要な場合はhttp://coding.westreicher.org/?p=23
:128バイトを超える文字列を扱う
おそらくより完全なあなたのための素晴らしい例、
次のコードは、どのように示していJavaでRSAキーペアを生成するためにするKeyPairGeneratorを使用します。
// Get an instance of the RSA key generator
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
// Generate the keys — might take sometime on slow computers
KeyPair myPair = kpg.generateKeyPair();
これはあなたに2つのキーを保持しているキーペアオブジェクト、提供します:プライベートと公開No. IC。これらのキーを使用するには、SealedObjectと組み合わせて使用してネットワーク経由で終了するデータを暗号化するCipherオブジェクトを作成する必要があります。これを行う方法は次のとおりです。
// Get an instance of the Cipher for RSA encryption/decryption
Cipher c = Cipher.getInstance("RSA");
// Initiate the Cipher, telling it that it is going to Encrypt, giving it the public key
c.init(Cipher.ENCRYPT_MODE, myPair.getPublic());
暗号を初期化したら、データを暗号化する準備が整いました。暗号化した後、結果データは「裸」と表示されても意味をなさないので、別のオブジェクトにカプセル化する必要があります。 JavaはこれをSealedObjectクラスで提供しています。 SealedObjectsは、暗号化されたオブジェクトのコンテナで、Cipherオブジェクトの助けを借りてその内容を暗号化および復号化します。
次の例では、するSealedObjectの内容を作成して暗号化する方法を示しています。
// Create a secret message
String myMessage = new String("Secret Message");
// Encrypt that message using a new SealedObject and the Cipher we created before
SealedObject myEncryptedMessage= new SealedObject(myMessage, c);
それが暗号化されているので、結果として得られるオブジェクトは、恐れることなく、ネットワークを介して送信することができます。データを復号化して取得できるのは、秘密鍵を保持している唯一の人です。通常、これはサーバーでなければなりません。メッセージを復号化するには、Cipherオブジェクトを再初期化する必要がありますが、今回は異なるモードで公開鍵の代わりに秘密鍵を復号化して使用します。
これは、Javaでこれを行う方法です。
// Get an instance of the Cipher for RSA encryption/decryption
Cipher dec = Cipher.getInstance("RSA");
// Initiate the Cipher, telling it that it is going to Decrypt, giving it the private key
dec.init(Cipher.DECRYPT_MODE, myPair.getPrivate());
今、暗号を解読する準備ができていることを、私たちが開催されたデータを復号化するためにするSealedObjectを伝える必要があります。
// Tell the SealedObject we created before to decrypt the data and return it
String message = (String) myEncryptedMessage.getObject(dec);
System.out.println("foo = "+message);
getObjectメソッドを使用しているとき、それは、オブジェクトのインスタンスを返すので、(それが実際に文字列のインスタンスであっても)、注意してください、そしてない、それは暗号化の前にあったことを、クラスのインスタンスので、あなた」それを以前の形にキャストする必要があります。 http://andreas.louca.org/2008/03/20/java-rsa-encryption-an-example/
RSAは、バルクデータの暗号化のためのものではありません。
上からです。代わりに、AESのような対称暗号を使用して、「大きな文字列」を暗号化します。次に、AESに使用されている対称鍵をRSA鍵で暗号化します。
BouncyCastleは、S/MIMEとPGPという2つのプロトコルをサポートしています。すべての実用的なプライバシープロトコルは、このように鍵輸送または鍵交換のために非対称アルゴリズムを使用する。
RSAで暗号化できるメッセージサイズはキーの係数に依存し、メッセージを安全に埋め込むために必要なバイト数は少なくなります。
このようなハイブリッド暗号化は、やり方です。 – CodesInChaos
関連するAPIへのコード例やリンクは害を与えません。 – CodesInChaos
- 1. RSA暗号化/復号化
- 2. RSA暗号化/復号化:文字列に変換
- 3. 暗号化および復号化クラス?
- 4. Javaの信頼性の低い文字列のRSA暗号化/復号化
- 5. RSA暗号化/復号化の実装
- 6. DES、RSAの暗号化と復号化
- 7. iphoneでのRSA暗号化/復号化
- 8. C++およびDelphiの一部の文字列を暗号化および復号化する
- 9. Crypto ++で生RSAアルゴリズムを使用してメッセージを暗号化および復号化しますか?
- 10. RSAとAESを使用した暗号化/復号化。基準?
- 11. MediaCodecを使用して暗号化されたデータをSurfaceTextureに復号化および復号化する
- 12. Java Classオブジェクト暗号化/復号化およびオブジェクトデータベース
- 13. pailler暗号システムは、負の大きな整数を暗号化および復号化できますか?
- 14. OpenSSL ECCを使用してテキスト文字列を暗号化/復号化する
- 15. SwiftでRSAを使用して文字列を暗号化
- 16. JavaとPHPの間の文字列の暗号化/復号化
- 17. RSA暗号化JavaでのAndroidと復号化:javax.crypto.BadPaddingException:復号化エラー
- 18. php7を使用してsaltで暗号化/復号化する文字列
- 19. SAMLアサーションを暗号化および復号化する方法
- 20. Azureストレージアクセスキーを暗号化および復号化する方法
- 21. RSA暗号化キーを復号化できない
- 22. JavaでのRSA暗号化、PHPでの復号化
- 23. RSA暗号化とJavaでの長いメッセージの復号化
- 24. AndroidとJavaで異なる文字列を暗号化/復号化する
- 25. シンプルなRSA暗号化(Java)
- 26. RSA OAEP、Golang復号化、Javaの暗号化
- 27. BadPaddingException RSA暗号化とJavaでの復号化
- 28. RSAでiosで暗号化し、javaサーバで復号化できない
- 29. Javaでサウンドファイルを暗号化および復号化する方法は?
- 30. RSA公開鍵を使用したAndroid暗号化文字列
セキュリティ、特に暗号化は、** hard **です。未処理の暗号APIの代わりに既存の高水準パッケージを使用するか、動作する方法の詳細を知る必要があります。それ以外の場合は、安全でないコードを書く可能性があります。 – SLaks
上位パッケージとは? –
コードを投稿してください。そこから作業することができます。 – Frank