0

PostGreSQL データベースといくつかの暗号化されたデータに問題があります。ブローフィッシュ アルゴリズムを使用して文字列を暗号化し、代わりにバイナリ データを取得します。このバイナリには、\0 およびその他のスケープ シーケンスを含めることができます。

私はこの方法でデータを保存します:

`pqxx::binarystring destinatary(encryptedData);`

それから私はそれを次のように読みます:

pqxx::binarystring bsmsg(r[0]["message"]);
encryptedData =bsmsg.get();

問題は、データが完全に返される場合もありますが、データが正しく返されて後でゴミが残る場合もあります。この奇妙なデータが暗号化された文字列に追加されないように、書き込み/読み取りをどの方向に変更する必要があるかについての手がかりはありますか?

私が行った別の試みは、この方法でデータを保存することです:

pqxx::binarystring msg(testMsg,testMsgsize);

同じ結果で。

編集:要求に応じて、いくつかのロギング調査を行いました:私はこの値を研究しています:

std::string encryptedData;
    bf.Encrypt(&encryptedData, ""); // THIS IS $4
    const void * testMsg = encryptedData.c_str();
    size_t testMsgsize = encryptedData.size();
    pqxx::binarystring msg(testMsg,testMsgsize);
    bf.Encrypt(&encryptedData, "yo"); //$5
    pqxx::binarystring destinatary(encryptedData);
    bf.Encrypt(&encryptedData, "yomaaaaaaaaaaaaaaaaslargo");//$6
    pqxx::binarystring owner(encryptedData);
    bf.Encrypt(&encryptedData, "123A@u");//$7
    pqxx::binarystring key(encryptedData);

em をとりわけ

execute addUnconfirmedInvitation: INSERT INTO friendnotices (ownerserver, type, daterecieved, message, destinatary, owner, internaldata, state, internaldataaux) VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9)
2014-08-11 17:12:32 CEST DETAIL:  parameters: $1 = 'invite.server()', $2 = 'invitation', $3 = '2014-08-11', $4 = '_(\351\204\376L\036Z', $5 = 'yo\002\002', $6 = 'p\010\224\254m\243\370\177R\222\314\022e/\005*;~\254\2075\205\363\375o\001', $7 = '\375\271\305v\272\036_\377\006\006\006\006', $8 = 'f', $9 = '\372f'' :w\037\312\005\005'

興味深いのは、同じ変数を再度作成して $5 と $6 を使用して検索し、正しい行を取得したことです。

2014-08-11 17:22:35 CEST LOG:  execute searchUnconfirmedInvitation: SELECT * FROM friendnotices WHERE (destinatary=$1) AND (owner = $2) AND (type = $3) AND (ownerserver = $4)
2014-08-11 17:22:35 CEST DETAIL:  parameters: $1 = 'yo\002\002', $2 = 'p\010\224\254m\243\370\177R\222\314\022e/\005*;~\254\2075\205\363\375o\001', $3 = 'invitation', $4 = 'invite.server()'

しかし、前に示した文字列を印刷しようとすると:

pqxx::binarystring bsmsg(r[0]["message"]);
        encryptedData =bsmsg.get();
        bf.Decrypt(&clearData, encryptedData);
        pqxx::binarystring bskey(r[0]["internaldata"]);
        encryptedData =bskey.get();
        bf.Decrypt(&clearData, encryptedData);
        pqxx::binarystring des(r[0]["destinatary"]);
        encryptedData =des.get();
        bf.Decrypt(&clearData, encryptedData);
        pqxx::binarystring own(r[0]["owner"]);
        encryptedData =own.get();
        bf.Decrypt(&clearData, encryptedData);

これは私が得るものです(3回の試行):

"���"       //this shouls be ""
"123A@u"    //this is right
"yo"        //this is right   
"yomaaaaaaaaaaaaaaaaslargoy" //i used this as search criteria.. but the last y isnt correct! 
"���"    //second try
"123A@u" 
"yo" 
"yomaaaaaaaaaaaaaaaaslargo1" //wow... now is a 1
"���"  //third try
"123A@u" 
"yo" 
"yomaaaaaaaaaaaaaaaaslargo"  //this time this is correct :?

試行を重ねるごとにすべてが変化し続けます。私は最終的に正しい "" を最初の属性に入れることができます。最初の試行で正しく表示される属性は、常に正しく表示されます。

4

2 に答える 2