質問

RSA がデータを暗号化して C# に渡すモジュールを入手しました。C# は、公開キー (64 ビットでエンコード) と渡されたトークンに基づいてそれを復号化する必要があります。

私は token 、64 ビットでエンコードされた公開鍵を持っています。これは、サンプルを開始するのに役立ちます。Java側から私が知っているのは、それが使用されているということだけです。Java 側から結果を取得したので、これを復号化するために C# でパーサーを作成する必要があります。公開キーとトークンの両方を文字列値として取得します。

    Cipher cipher = Cipher.getInstance(ALGORITHM); //Algorithm = "RSA"
    cipher.init(Cipher.DECRYPT_MODE, key);

ありがとう

役に立ちましたか?

解決

始めるには、次のものが必要です。 プライベート メッセージを復号化するためのキー。「公開鍵 (64 ビットエンコード)」ということで、実際に持っているのは、「----- BEGIN CERTIFICATE-----」というヘッダー行と、 「-----END CERTIFICATE-----」というフッター。

それが正しい場合は、秘密キーを見つける必要があります。これは、拡張子「.p12」または「.pfx」が付いた PKCS #12 形式のファイルに保存される場合があります。秘密キーがそのようなファイルに保存されている場合、秘密キーにアクセスするにはパスワードが必要になります。

あるいは、OpenSSL およびその他のユーティリティは、Base-64 でエンコードされた秘密キー ファイルまたはバイナリ形式の秘密キー ファイルを使用します。これらにはさまざまな拡張子があり、パスワードで保護されている場合とそうでない場合があります。ファイルのヘッダー行に「-----BEGIN RSA PRIVATE KEY-----」または「-----BEGIN PRIVATE KEY-----」がある場合、それが実際には秘密キーです。 。

最後に、Windows は秘密キーを内部キー ストアに保存できます。

秘密キーの場所を明確にしたら、質問を更新してください。


秘密キーが Java 側で使用される場合、デジタル署名を実行しようとする可能性があります。私がテストしたいくつかの Java プロバイダーはすべて、この方法で (不正に) 使用した場合に正しい結果を生成しますが、署名を行っている場合は、 Signature クラスを使用する必要があります。C# コードでは、署名を「検証」するために署名オブジェクトも使用する必要があります。

暗号化は秘密鍵を使用して実行されます。以来、 公共 鍵は 公共、 誰でもメッセージを解読できます。つまり、メッセージは機密ではありません。公開キーは、署名されたメッセージを検証するために受信者によって使用されます。

他のヒント

このコードをチェックしてください。

public static string Decrypt(string inputText)
      {
        RijndaelManaged rijndaelCipher = new RijndaelManaged();
        byte[] encryptedData = Convert.FromBase64String(inputText.Replace(" ","+"));
        PasswordDeriveBytes secretKey = new PasswordDeriveBytes(ENCRYPTION_KEY, SALT);

        using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
        {
          using (MemoryStream memoryStream = new MemoryStream(encryptedData))
          {
            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
            {
              byte[] plainText = new byte[encryptedData.Length];
              int decryptedCount = cryptoStream.Read(plainText, 0, plainText.Length);
              return Encoding.Unicode.GetString(plainText, 0, decryptedCount);
            }
          }
        }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top