0

このアセンブリをjsonエクストラクタとして使用していますが、すべて正常に機能しています。私の入力であるjsonファイルは、今では単なるjsonです。私がやろうとしているのは、暗号化されたコンテンツを含むファイルを読み取ることです。

したがって、エクストラクタでは、文字列を復号化する C# メソッドを使用したいのですが、文字列をどこにも取得していないため、これを機能させる方法がわかりません。抽出方法はこちら。

public override IEnumerable<IRow> Extract(IUnstructuredReader input, IUpdatableRow output)
    {
        // Json.Net
        using (var reader = new JsonTextReader(new StreamReader(input.BaseStream)))
        {
            // Parse Json
            //  TODO: Json.Net fails with empty input files
            var root = JToken.ReadFrom(reader);

            // Rows
            //  All objects are represented as rows
            foreach (JObject o in SelectChildren(root, this.rowpath))
            {
                // All fields are represented as columns
                this.JObjectToRow(o, output);

                yield return output.AsReadOnly();
            }
        }
    }

そして、これが私の復号化方法です

 public static class Decryptor
 {
    private static readonly byte[] _key = Convert.FromBase64String("AAECAwQFBgcICQoLDA0ODw==");
    private static readonly byte[] _iv = Convert.FromBase64String("AAECAwQFBgcICQoLDA0ODw==");

    private static readonly ICryptoTransform _decryptor;

    static Decryptor()
    {
        var myRijndael = new RijndaelManaged { Key = _key, IV = _iv, Padding = PaddingMode.PKCS7 };
        _decryptor = myRijndael.CreateDecryptor(myRijndael.Key, myRijndael.IV);
    }

    public static string Decrypt(string input)
    {
        // Create the streams used for decryption. 
        using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(input)))
        {
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, _decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                {
                    return srDecrypt.ReadToEnd();
                }
            }
        }
    }

誰かが私を正しい方向に向けることができますか? ありがとう!

4

2 に答える 2

1

ファイル全体が暗号化されていますか、それとも JSON ドキュメント内のフィールドですか? 最初のケースでは、エクストラクタで baseStream を復号化する必要があります。抽出プロパティのatomicFileProcessingがtrueに設定されていることを確認してください。

JSON ドキュメント内のテキスト プロパティのみが暗号化されている場合は、次の 2 つのオプションがあります。

  1. エクストラクタを使用してフィールドを抽出し (SqlMap でキーと値のペアとして抽出されることに注意してください)、復号化する必要がある値に C# ユーザー定義関数を適用します。

  2. JObjectToRow 関数のより深いところに、Map エントリを生成するコードがあります。そこに復号化を適用します。

于 2016-08-03T18:48:41.390 に答える