で復号化し、私は官民の鍵ペアを生成するには、以下のJavaコードを持っていると仮定しますRSA暗号、PHP
KeyPairGenerator generator = KeyPairGenerator.getInstance ("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
generator.initialize (1024, random);
KeyPair pair = generator.generateKeyPair();
RSAPrivateKey priv = (RSAPrivateKey)pair.getPrivate();
RSAPublicKey pub = (RSAPublicKey)pair.getPublic();
// Sign a message
Signature dsa = Signature.getInstance("SHA1withRSA");
dsa.initSign (priv);
dsa.update ("Hello, World".getBytes(), 0, "Hello, World".length());
byte[] out = dsa.sign();
/* save the signature in a file */
FileOutputStream sigfos = new FileOutputStream("sig");
sigfos.write(out);
sigfos.close();
はどのようにして行くとPHPでファイル「SIG」を解読するのでしょうか?私は投稿https://stackoverflow.com/a/1662887/414414DER
ファイルをPEM
(私はまた、公開鍵をJavaから保存すると仮定して)に変換する機能を提供しています。
私のようなものを試してみました:
$key = openssl_pkey_get_public ("file://pub_key.pem");
$data = null;
openssl_public_decrypt (file_get_contents ("sig"), $data, $key);
echo $data, "\n";
それが正常にメッセージを復号化し、それは多くの奇妙な文字です。
このシナリオは、メッセージをPHPサーバーに送信するが、秘密キーでデータを暗号化するJavaクライアントです。 PHPはパブリックキーについて知っています。パブリックキーは、メッセージの復号化と検証に使用する必要があります。
私はここでこの問題に関する多くの記事を読んだことがありますが、これはちょっとした問題です。特に使用されるアルゴリズムが異なる場合などです。重複
ご意見をいただければ幸いです!あなたは間違ったものを解読することです公開鍵を、参照しているように見えますスニペット
$key = openssl_pkey_get_public ("file://pub_key.pem");
から
"メッセージは正常に復号化されますが、それは奇妙な文字です。" - あなたはそれについてより具体的になりますか?それは単純にエンコードの問題でしょうか? –
デコードされたメッセージは元のテキストのように見えるか、または完全に文字化けしていますか? –
JavaとPHPの間で送信されたメッセージを確認しようとしていますか、それとも暗号化していますか?または両方? –