2017-12-12 12 views
1

16進コード化されたパスワードを使用して暗号化されたテーブルにbyteaとして定義された列があります。Npgsqlはpgp_sym_decryptクエリを処理しません - コマンドラインから動作します

次のように私はパテからデータを読み出すことができます:私は、同じクエリを実行するためのNpgsqlを使用する場合

SELECT pgp_sym_decrypt(_encypted_text, E'\\x465af9b6f0ea0207188236e8698c76772f4fedcbc39fabf29c2c4d98b23d4e72') FROM msg; 
pgp_sym_decrypt 
------------------ 
This is the text 
(1 row) 

は、しかし、それは例外をスロー:私は使用しています

Npgsql.PostgresException: 39000: Wrong key or corrupt data 

コードがあります

 // create new connection 
     con = new NpgsqlConnection(m_ConnectString); 

     // setup certificate handler 
     con.UserCertificateValidationCallback = theUserCertificateValidationCallback; 

     // setup query string 
     strQuery = "SELECT pgp_sym_decrypt(_encypted_text, E'\\x465af9b6f0ea0207188236e8698c76772f4fedcbc39fabf29c2c4d98b23d4e72') FROM msg "; 

     // create a new comnmand using the query and connection 
     cmd = new NpgsqlCommand(strQuery, con); 

     // open the connection 
     con.Open(); 

     // execute the query 
     reader = cmd.ExecuteReader(); 

最後の行が例外ハンドラをトリップします。

2つのインターフェイスが異なる動作をする理由はありますか? Npgsqlでどのように復号化できますか?

答えて

1

私は、クエリをAPI経由で渡す必要があり、2番目のレベルの解析が行われる可能性があることを確認しました。したがって、エスケープ文字の2番目のセットが必要でした。

E'\\\\x 

ではなく

E'\\x 

を開始するために必要なパスワードをAPI経由で使用

関連する問題