私は解決策を思いつきました:
OpenSSL は、デコード関数で何も指定されていない場合にのみ、パスワードの入力を求めます。Richard Moore が回答で指摘したようにQSslKey
、パスフレーズを渡すことができるコンストラクターがあります。
ここで空でない文字列が渡される限り、OpenSSL はパスワードの入力を求めません。プラス: キーが保護されていない場合、パスワードは無視されます。したがって、空でない文字列が渡されることを確認するだけなので、これが私の解決策です。
// Never use empty PWD, as this blocks. (Use null-string)
// PLUS: setting a password for a non-protected key still correctly loads the key!
QByteArray thePwd = pwd.isEmpty() ? QByteArray("\0", 1) : pwd.toUtf8();
// Try all encodings
QList<QSslKey> keys = QList<QSslKey>()
<< QSslKey( theKey, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey, thePwd )
<< QSslKey( theKey, QSsl::Rsa, QSsl::Der, QSsl::PrivateKey, thePwd )
<< QSslKey( theKey, QSsl::Dsa, QSsl::Pem, QSsl::PrivateKey, thePwd )
<< QSslKey( theKey, QSsl::Dsa, QSsl::Der, QSsl::PrivateKey, thePwd );
// Find a valid encoding
foreach ( QSslKey k, keys ) {
if ( !k.isNull() ) {
ret = k;
break;
}
}