如何在数据库中存储私钥?

时间:2015-05-27 20:43:34

标签: php security openssl private-key

我对证书和密钥没有经验。我必须在我的数据库中存储第三方API的私钥。我有一把密钥来加密它。这就是我在PHP中所做的

$private_key = "----BEGIN PRIVATE KEY---\nABCDBLAH\n---END PRIVATE KEY----\n"
// The encryption and storing part - 1
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', 'mykey', 0, $iv);
$encrypted_data = $encrypted .':'base64_encode($iv);
//store in the database

//retrieve later
$parts = explode(':',$encrypted_data);
$private_key= openssl_decrypt($parts[0], 'aes-256-cbc', 'mykey', 0, base64_decode($parts[1]));
// 2
Use in the API.

如果我忽略1和2之间的部分来存储和从数据库中检索密钥,那么API和一切都正常,这意味着存储和检索密钥有问题。我在这里做错了什么?如果这不是正确的方法,我应该采用什么方式?请帮帮我。

注意:/ n部分在私钥中。如果我不加密,/ n无关紧要,API工作正常。

1 个答案:

答案 0 :(得分:0)

  

我在这里做错了什么?

base64_encode()上使用$encrypted可以防止数据库编码导致数据丢失。

但是,您做错的其他事情中有很多会影响方案的安全性,而不仅仅是阻止其运行。

请查看this answer,以获取有关如何安全实施加密的全面指南。