我正在使用pgp-2fa并且在我当地工作得很好。我现在在主机上尝试它,但没有显示加密的消息。
工作方式是
$key = DB::table('users')->select('pgp_key')->where('user_id', '=', $data['user_id'])->first();
$pgp = new pgp_2fa();
$msg = '';
$pgp->generateSecret();
$enc = $pgp->encryptSecret($key->pgp_key);
return View::make('users.auth', ['enc'=> $enc]);
在这里,我从他的个人资料中选择了用户public pgp key并加密了该消息,然后他必须用他的私钥解密。
当我var_dump($enc);
收到
bool(false)
和var_dump($pgp);
object(pgp_2fa)#336 (1) { ["secret":"pgp_2fa":private]=> string(15) "603893251905515" }
这是正确的string(15) "603893251905515"
。我认为问题是$enc
,因为它正在返回bool(false)
。
这就是我在视图中的内容
<pre>{{ $enc }}</pre>
再说一遍:这在我的本地工作得很好,但无法弄清楚为什么在这里不起作用。任何帮助表示赞赏。
更新:
var_dump($key);
也会从此数据库中为此用户返回正确的密钥。我没有复制整个密钥因为很长:
object(stdClass)#353 (1) { ["pgp_key"]=> string(1756) "-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 m............
更新2:pgp-2fa.php
class pgp_2fa {
private $secret;
// Generate safe hash of unencrypted secret, push it to the session and save unencrypted secret locally
public function generateSecret(){
// Generate unencrypted secret
$secret = generateSecretKey();
// Hash the secret with bcrypt
$secret_hash = password_hash($secret, PASSWORD_BCRYPT);
// Save within the session
Session::set('pgp-secret-hash', $secret_hash);
$this->secret = $secret;
}
// Encrypt secret with PGP public key
public function encryptSecret($public_key){
// Set GnuPG homedir to /tmp
putenv("GNUPGHOME=/tmp");
// Create new GnuPG instance
$gpg = new gnupg();
// Import given public key
$key = $gpg->import($public_key);
// Add imported key for encryption
$gpg->addencryptkey($key['fingerprint']);
// Encrypt the secret to a PGP message
$enc = $gpg->encrypt($this->secret);
// Clear the encryption key
$gpg->clearencryptkeys();
// Return the PGP message
return $enc;
}
}