モードでメソッドを使用して文字列を暗号化し、およびを使用してパラメーターを定義および文字列化するため、QtでCrypto ++ライブラリを使用しています。AES
CBC
StringSource
StringSink
input
output
まず、ファイルからすべてのバイトを読み取り (「ユニコード」または「ASCII」エンコーディング)、関数のパラメーターとして設定し、input
出力(暗号テキスト) の (データ型) としてパラメーターを設定します。文字列を取得して「aes-cbc」で暗号化し、出力を表示したいだけです。StringSource
string
また、データをファイルに書き込むための2 つの関数 (consistおよびstream パラメータ) も知っFileSource
ています。しかし、ファイルの内容を入力文字列として読みたいです。FileSink
input
output
私のコード:
void Widget::onEncryptButton()
{
QByteArray key = "qwertyuiopasdfgh";
QByteArray iv = "wertyuiopasdfghj"
QByteArray plain;
string cipher;
QFile fi("/home/msi/Desktop/input.txt");
QFile fo("/home/msi/Desktop/output.enc");
fi.open(QFile::ReadOnly);
fo.open(QFile::WriteOnly);
plain = fi.readAll();
AESEncryption aese((byte*)key.constData(), AES::DEFAULT_KEYLENGTH); // default is 16
CBC_Mode_ExternalCipher::Encryption encryptor(aese, (byte*)iv.constData());
StringSource(plain, true, new StreamTransformationFilter(encryptor, new StringSink(cipher)));
QMessageBox::information(this, "", QString("%1, %2").arg(strlen(cipher.c_str())).arg(cipher.size())); // just for viewing cipher length
fo.write(cipher.c_str());
fi.close();
fo.close();
}
今、私は以下の問題を抱えています:
コンパクト ファイルのコンテンツ (例: 900 バイト) を読み取り、それを入力として設定すると
StringSource
、生成された暗号が不完全になります (例: 320 バイト)「QMessageBox」での出力
strlen(cipher.c_str())
が異なりますcipher.size()
私のコードは、いくつかのファイル(「Unicode」または「ASCII」、「大きな」または「小さな」サイズ)を読み取ると、正しく機能しない場合があります。どの理由がこの問題を引き起こしたのかわかりませんか?
- でも、入力文字列を直接設定して(ファイルから読み取らずに)、再び失敗しました!
よろしく!