私はpgcryptoを使用して暗号化されたデータを復号しようとしています。唯一のテストなのでIVを使用しませんでしたが、C#でデータを復号化できません。pgcryptoで暗号化されたデータの復号化(C#で)
POSTGRESで暗号化:
C位における復号enc_key := '\\xAACE38F289EC3EA209B48D';
-- Time insertions
ts_start := clock_timestamp();
FOR i IN 1..num_loops LOOP
-- The text to insert and its key
plaintext := 'Number: ' || i;
plaintext_pk := gen_random_uuid();
plaintext_pk_as_text := plaintext_pk::text;
-- The ref entries
user_pk := gen_random_uuid();
user_ref_pk := encrypt(plaintext_pk_as_text::bytea, enc_key, 'aes');
-- Add the enries
INSERT INTO "Text" VALUES(plaintext_pk, plaintext);
INSERT INTO "User" VALUES(user_ref_pk, user_pk);
END LOOP;
ts_end := clock_timestamp();
elapsed_raw := cast(extract(epoch from (ts_end - ts_start)) as numeric(18,3));
:
// The decryption key
byte[] enc_key = new byte[] { 0xAA, 0xCE, 0x38, 0xF2, 0x89, 0xEC, 0x3E, 0xA2, 0x09, 0xB4, 0x8D,
0x00, 0x00, 0x00, 0x00, 0x00 };
public static string AESDecryptByteArray(byte [] encoded_data, byte [] key)
{
string result = "";
byte [] result_ba = new byte[64];
using (Aes myAes = Aes.Create())
{
if (myAes == null)
{
throw new Exception("Failed to create AES object.");
}
myAes.Key = key;
myAes.Mode = CipherMode.CBC;
myAes.Padding = PaddingMode.PKCS7;
MemoryStream streamMem = new MemoryStream(encoded_data);
byte[] IV = new byte[16];
// streamMem.Read(IV, 0, 16);
for (int i = 0; i < 16; ++i)
{
IV[i] = 0;
}
myAes.IV = IV;
int iNumBytes = 0;
var decryptor = myAes.CreateDecryptor();
using (CryptoStream streamCrypt = new CryptoStream(streamMem, decryptor, CryptoStreamMode.Read))
{
iNumBytes = streamCrypt.Read(result_ba, 0, 48);
}
result = System.Text.Encoding.ASCII.GetString(result_ba);
}
return result;
} // AESDecryptByteArray
Iは、行の1つ、およびバイナリキーに起因する暗号化されたデータをコピーするが、C#コードを用いて発泡続けますCryptographicException( "パディングは無効で、削除できません")例外。私の理解は、pgcryptoのencrypt()のデフォルトはcbc \ pkcsです。明らかに、私は何かを欠いている。
喜んでお寄せいただきありがとうございます。
アダム。
おそらく、C#関数でデータを暗号化し、暗号化されたデータをPostGresデータと100%一致させることができます。それらが一致すると、2つのシステム間で切断がどこにあるかを見つけることができます。 –
ありがとう、マイケル - 良い提案。私はそれを試してみます。または、私がC#で暗号化と復号化を開始できることを確認することさえできます。 –